C での参照の再割り当て
C では、参照はメモリ アドレスへの不変のバインディングとして説明されることがよくあります。しかし、最近の質問により、この理解に疑問が生じました。このトピックを詳しく調べるために、次の C プログラムを調べてみましょう:
#include <iostream> int main() { int i = 5, j = 9; int &ri = i; std::cout << "ri is: " << ri << '\n'; i = 10; std::cout << "ri is: " << ri << '\n'; ri = j; // Is this not reassigning the reference? std::cout << "ri is: " << ri << '\n'; return 0; }
このコードは正常にコンパイルされ、その出力は次のようになります:
ri is: 5 ri is: 10 ri is: 9
疑問が生じます: 割り当て ri はありません= j;不変参照の概念に矛盾しますか?
いいえ、ri は依然として i への参照です。 これは、ri と i のアドレスを出力し、それらが同じであることを観察することで検証できます。
実際に起こっていることは、i の値を変更するために ri 参照が使用されていることです。参照は不変であり、常に同じメモリ位置を指す必要があるため、ri に新しい値を割り当てることは実際に禁止されています。
比較のために、次のコードを考慮してください。
const int &cri = i;
Thisこれは定数への参照であるため、コードでは cri への代入は許可されません。これは、参照を新しいメモリ位置に再割り当てすることはできませんが、値が変更可能であれば、参照が参照するアドレスの値を変更するために使用できることを示しています。
結論として、ri = j;元のプログラムでの代入は、参照自体の再代入ではなく、参照する値の変更です。
以上がC 参照は再割り当てできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。