ホームページ > バックエンド開発 > C++ > C 参照は再割り当てできますか? それとも何か他のことが起こっていますか?

C 参照は再割り当てできますか? それとも何か他のことが起こっていますか?

Susan Sarandon
リリース: 2024-12-04 22:07:13
オリジナル
403 人が閲覧しました

Can C   References Be Reassigned, or Is Something Else Happening?

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 が最初は i を指し、その後 j を参照するように変更されることを示しています。

質問:

このコードは本当に参照 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート