1. ホーム
  2. c++

[解決済み] C++ ConstオブジェクトへのConst参照とNon ConstオブジェクトへのNon Const参照の相違点

2022-03-11 21:42:47

質問

参照するオブジェクトがconstオブジェクトでない場合、参照のための"const"キーワードは何のためにあるのでしょうか?r1とr2が行うことに違いはあるのでしょうか(下記)?

int i = 42; // non const object
const int &r1 = i; // const reference to non const object

int j = 25; // non const object
int &r2 = j; // non const reference to non const object

以下、CPP Primer 5thからの引用です。

C++プログラマは、「constへの参照」というフレーズを次のように省略する傾向があります。 "const参照"。この略語は、この略語を覚えていれば、意味があります。 は略語です。 技術的に言えば、const参照は存在しない。参照は オブジェクトを作ることができないので、参照そのものをconstにすることはできません。実際 は別のオブジェクトを参照させることができないので、ある意味ですべての 参照は const です。参照がconstかnonconstのどちらを参照しているかは 型は、その参照で何ができるかに影響し、変更できるかどうかには影響しません。 参照自体のバインディングです。

これは、非定数オブジェクトを参照しているときに、参照を "const" にしても、まったく何も起こらないということだと思います。その参照を定義するときにconstキーワードを取り除いたほうがいいかもしれません。

確認のため、ここで質問します。

Edit: どうやら最初の推測は間違っていたようです。非定数オブジェクトへの定数参照には、そのオブジェクトを変更できないようにする、という目的があることがわかりました。非定数オブジェクトは他の手段で変更することができますが、このconst参照では変更することができません。

皆さん、ありがとうございます。

解決方法は?

"参照するオブジェクトがconstオブジェクトでない場合、参照のための"const"キーワードは何のためにあるのでしょうか。 その目的は、その参照が参照先のオブジェクトを変更するために使用されるのを防ぐためです。

int i = 42; // non const object
const int &r1 = i; // const reference to non const object
r1 = 6 * 9; // error, r1 cannot be used to modify i;