• ベストアンサー

非const参照とconst参照の違いは

非const参照とconst参照の違いは この違いがさっぱり分かりません。 ご回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

int x; const int& rx0 = x; // 非const参照 int& rx1 = x; // const参照 rx0 = 123; // error. const なので書き換えできない rx1 = 123; // ok. x == 123 となる

noname#139165
質問者

補足

お返事が遅くなり、すみません。 >int x; >const int& rx0 = x; // 非const参照 >int& rx1 = x; // const参照 このことですが、"const int& rx0 = x;"ですが、constがついているのですが、これは非const参照で正しいでしょうか。 私はconstがついているので、"const int& rx0 = x;"は、むしろconst参照だと思っていました。

その他の回答 (3)

回答No.4

っと、ごめんなさい。コメントが逆です。

回答No.3

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参照の初期化子が左辺値でないときや、参照変数と初期化子の型が違うときは、一時変数に初期化子への値を保存してその一時変数への参照を使うものと決められています。)

回答No.1

 参照型で渡される関数の引数のことなら、const参照は変数が関数内では参照のみで書き換えが行われないことを明示しています。それが指定されていない場合は(その宣言だけでは)書き換えがあるかどうかはわかりません。(関数内から見ればconstで宣言されているものは書き換え不可、それ以外は書き換え可能と見なせます)

関連するQ&A