[解決済み] C++ ConstオブジェクトへのConst参照とNon ConstオブジェクトへのNon Const参照の相違点
質問
参照するオブジェクトが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;
関連
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] constexpr` と `const` の相違点
-
[解決済み] リファレンスとポインタの使い分け
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】なぜ、constでない参照は一時的なオブジェクトにバインドできないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] Const before or const after?