- ベストアンサー
非const参照とconst参照の違いは
非const参照とconst参照の違いは この違いがさっぱり分かりません。 ご回答お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
int x; const int& rx0 = x; // 非const参照 int& rx1 = x; // const参照 rx0 = 123; // error. const なので書き換えできない rx1 = 123; // ok. x == 123 となる
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
っと、ごめんなさい。コメントが逆です。
- akayoroshi
- ベストアンサー率50% (46/91)
const double addr ( double& x, double& y ) { return x+y; } const double addcr( const double& x, const double& y ) { return x+y; } int main() { int x=1, y=2; double ar=addr(x,y); double acr=addcr(x,y); double br=addr(1.0,2.0); double bcr=addcr(1.0,2.0); } これをコンパイルすると、非const参照の関数の引用ではエラーになり、const参照の関数の引用ではエラーにはなりません。 const参照の場合、初期化子(関数引用の実引数)は左辺値(変数や配列要素)でなくても、型が合っていなくてもよいということになっています。(const参照の初期化子が左辺値でないときや、参照変数と初期化子の型が違うときは、一時変数に初期化子への値を保存してその一時変数への参照を使うものと決められています。)
- magicalpass
- ベストアンサー率58% (378/648)
参照型で渡される関数の引数のことなら、const参照は変数が関数内では参照のみで書き換えが行われないことを明示しています。それが指定されていない場合は(その宣言だけでは)書き換えがあるかどうかはわかりません。(関数内から見ればconstで宣言されているものは書き換え不可、それ以外は書き換え可能と見なせます)
補足
お返事が遅くなり、すみません。 >int x; >const int& rx0 = x; // 非const参照 >int& rx1 = x; // const参照 このことですが、"const int& rx0 = x;"ですが、constがついているのですが、これは非const参照で正しいでしょうか。 私はconstがついているので、"const int& rx0 = x;"は、むしろconst参照だと思っていました。