参照変数の概念を理解しています。これは、他の変数のエイリアスです。
int varA = 100;
int &varB = varA;
varB
これは を参照してvarA
おり、両方とも同じメモリ位置を指しています。1 つの変数への変更は、他の変数に反映されます。
質問:
a)
int &c = 100;
上記の文の意味は何ですか? また、次の文とどのように違いますか?
b)int c = 100;
1(b) ではなく 1(a) を使用する必要があるシナリオはありますか?
参照変数の概念を理解しています。これは、他の変数のエイリアスです。
int varA = 100;
int &varB = varA;
varB
これは を参照してvarA
おり、両方とも同じメモリ位置を指しています。1 つの変数への変更は、他の変数に反映されます。
質問:
a)int &c = 100;
上記の文の意味は何ですか? また、次の文とどのように違いますか?
b)int c = 100;
1(b) ではなく 1(a) を使用する必要があるシナリオはありますか?
これを除いて、すべて正しいです:
int &c = 100; //error
C++03 と C++11 の両方でコンパイル エラーが発生します。これは、非 const 参照100
を許可されていない一時オブジェクト (から作成された) にバインドしようとするためです。
ただし、C++11 ではこれを行うことができます。
int && c = 100; //ok
これは右辺値参照と呼ばれます。
ただし、 const 参照を一時的にバインドできます (C++03 と C++11 の両方):
int const & c = 100;
-
int c = 100;
というオブジェクトを定義し、c
で初期化するだけ100
です。ここでは参照しません。
int &c = 100
は無効なコードです。非 const 参照を一時にバインドすることはできません。
const
有効にするには、参照が必要です。
const int &c = 100;
その間、
int c = 100
有効なコードです。c
型の名前付き変数を作成し、int
で初期化し100
ます。
1)int& c = 100;
は違法ですが、2 番目のものは違法ではありません。
参照変数の概念を理解しました。
参照を本当に理解していれば、実行後c = 101
に定数100
が突然 に変わることを期待しています101
か?
2) 1) は違法なので、答えても意味がありません。
int& i = 100;
違法です。
次のように言うのは合法です。
int const& i = 100;
const int& i = 100; // same as above
このコンテキストでは特に有用ではありませんが、関数呼び出しの目的で機能する必要があります。
void foo(int const& i) { ... }
...
foo(100);