C では参照を再代入できますか?
C では、参照は、きっぱりと初期化する必要がある不変のエンティティとして宣伝されることがよくあります。ただし、最近のコード スニペットにより、この原則について疑問が生じています。
コード スニペット:
int i = 5, j = 9; int &ri = i; cout << "ri is : " << ri << "\n"; i = 10; cout << "ri is : " << ri << "\n"; ri = j; cout << "ri is : " << ri << "\n";
所見:
質問:
このコードは本当に参照 ri を再割り当てしますか、それとも何かですか?それ以外
答え:
いいえ、ri は依然として i を指します。見かけの再代入は、実際には参照 ri による i の変更です。
説明:
参照が宣言されると (例: int &ri = i)、バインドされます。オブジェクト (この場合は i) にリンクされ、プログラム全体を通じてオブジェクトへのリンクが維持されます。コード ri = j は、ri を再割り当てするのではなく、参照 ri を通じて i の値を変更します。
これを証明するには、&ri と &i を使用して ri と i のアドレスを出力すると、それらが残っていることがわかります。同じ。さらに、ri が j に再割り当てされた場合、ri を介して i を変更することはできなくなりますが、これは指定されたコードの場合ではありません。
結論:
コード スニペットでは参照は再割り当て可能であるように見えますが、そうではありません。代わりに、参照先のオブジェクトを間接的に変更します。 Const 参照 (例: const int &cri = i) は、そのような変更を防止し、真の不変性を強制します。
以上がC 参照は再割り当てできますか? それとも何か他のことが起こっていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。