![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
#include <iostream>
template <typename T>
T minimum(const T& lhs, const T& rhs)
{
return lhs < rhs ? lhs : rhs;
}
int main()
{
int a=2;
int b=3;
int i = minimum<int>(a, b);
std::cout << i << std::endl;
return 0;
}
において
const T& lhs
のところで
Tにconstと&が修飾されていますがこれはどういう効果があるのでしょうか?
No.2ベストアンサー
- 回答日時:
constでない変数やリテラルをconstな変数で参照しても違反にはなりません。
質問の文脈ではconstは関数minimum内で変数が変更されないことを要請しているだけですので、関数の外での制約はありません。main内だけでconst違反を起こそうとすれば、main内でconst変数を宣言して書き換える必要があります。
回答ありがとうございます
関数内で変数を変更しないということの使用者への情報通知ということと
関数作成者がうっかりconst変数を変更したときに
コンパイラに関数作成者に注意してほしいということですね
No.1
- 回答日時:
> const T& lhs
constは定数の意味で、lhsが変更できない変数であることを示します。
&はlhsが参照変数であることを示します。関数の引数の場合、その引数が値渡しではなく参照渡しであることを示しています。
値渡しは変数の内容をコピーして渡しますが、参照渡しでは変数への参照を渡すため、大きなオブジェクトを引数にする際にはコピー処理がない分だけ早くなります。コピーコンストラクタの引数などはそもそも値渡しが理屈乗できないので参照渡ししかないですしね。
参照渡しだと関数内で変数値を上書きした場合は呼び出し元も上書きされてしまいますが、constにしておけばそもそも上書きできないので上書きの危険はなくなります。
なお参照渡しはポインタ渡しと似ていますが、変数の使い方が違っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- 野球 野球のポジションでlhsやrhsって何ですか? 3 2022/08/26 01:01
- C言語・C++・C# C言語です 2 2023/10/16 01:43
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
- C言語・C++・C# C言語 配列と関数の練習問題 6 2024/04/08 16:50
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
mallocについて
C言語・C++・C#
-
なんで
C言語・C++・C#
-
-
4
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
5
0 == False はいいけど
C言語・C++・C#
-
6
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
7
バッチファイルで以下のようなものは作れますか? ・Microsoft Defenderでウイルススキ
C言語・C++・C#
-
8
プログラム言語について c言語もコードによって機械語に通訳されると知りました。直接機械が通訳しなくて
C言語・C++・C#
-
9
Python、プログラミングについて質問です
C言語・C++・C#
-
10
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
11
だれがとけるの?
C言語・C++・C#
-
12
プログラマーです。このDB設計だと絶対後々面倒なことになるぞ...! って思った時ってどうしたらいい
C言語・C++・C#
-
13
C言語の関数と配列に関する質問
C言語・C++・C#
-
14
double型が正常に認識されていない恐れ
C言語・C++・C#
-
15
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
16
システムエンジニアの適正について
C言語・C++・C#
-
17
右ビットシフト
C言語・C++・C#
-
18
C言語 バッファについて。
C言語・C++・C#
-
19
C言語について。
C言語・C++・C#
-
20
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語で分からないところがあり...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
c言語のリダイレクトによる円...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
C言語、行列の積を求めるプログ...
-
複数桁10進数の*桁目だけを抽出...
-
異なる文字列のマッチングを、D...
-
acceptをalarmでタイムアウトさ...
-
read関数をノンブロッキングで...
-
C言語のポインタの問題の解答が...
-
課題でつまってます・・・
-
入力を待たずにstdinの監視をし...
-
(マルチスレッド)_beginthrea...
-
(int *)の意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
課題でつまってます・・・
-
c言語の配列を使ってサイコロを...
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報
回答ありがとうございます
int main()の部分だけを
int main()
{
int a=2;
int b=3;
int i = minimum<int>(a, b);
int j = minimum<int>(3, 2);
a=b=7;
int k = minimum<int>(a, b);
std::cout << "Hello World!" << std::endl;
std::cout << i << std::endl;
std::cout << j << std::endl;
std::cout << k << std::endl;
return 0;
}
に変えてもエラーになりません
どうすればconst違反、参照渡し違反になるでしょうか?