![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
#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も見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
mallocについて
C言語・C++・C#
-
C言語 バッファについて。
C言語・C++・C#
-
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
-
4
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
5
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
6
C言語関数違いについて。
C言語・C++・C#
-
7
写真のプログラムは、1からnまでの、全整数の積すなわち階乗値を求めて返却する関数を作成したいのですが
C言語・C++・C#
-
8
C言語について。
C言語・C++・C#
-
9
プログラミング言語の制作方法について
C言語・C++・C#
-
10
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
-
11
これなにがちがうんですか??
C言語・C++・C#
-
12
C言語の関数と配列に関する質問
C言語・C++・C#
-
13
バッチファイルで以下のようなものは作れますか? ・Microsoft Defenderでウイルススキ
C言語・C++・C#
-
14
変数名を引数として渡す、アドレスを引数として渡す方法
C言語・C++・C#
-
15
パイソン。If elseの挙動について教えてください。パソコンは、if else で、まずifに当て
C言語・C++・C#
-
16
gcc13.2のバグ?
C言語・C++・C#
-
17
c言語
C言語・C++・C#
-
18
C言語 列挙型(enum型)変数について
C言語・C++・C#
-
19
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
20
システムエンジニアの適正について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
【C++】関数ポインタの使い方
-
エラー 添字が付けられた値が、...
-
acceptをalarmでタイムアウトさ...
-
比較回数と交換回数表示について
-
ラップ関数とはどんなものですか?
-
商と剰余を同時に求める(C言語)
-
c++でテンプレートのコードでわ...
-
数字列を3桁ごとにカンマで区切...
-
C言語 配列と関数の練習問題
-
read関数をノンブロッキングで...
-
C言語 エラーの原因がわからな...
-
C++でvectorにテキストファイル...
-
C言語の配列をC++のvectorに高...
-
実数の整数部,小数部の取得
-
C言語初心者です、、、お助けく...
-
if と配列の組み合わせ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
へんな現象
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
if と配列の組み合わせ
-
C言語での奇数の和
-
C言語 配列と関数の練習問題
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
C言語
-
実数の整数部,小数部の取得
-
足して100になるような乱数のア...
-
卒業研究でよく分からないとこ...
-
数字列を3桁ごとにカンマで区切...
-
c言語
-
std::set<int> で、ある値が何...
-
比較回数と交換回数表示について
おすすめ情報
回答ありがとうございます
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違反、参照渡し違反になるでしょうか?