1. ホーム
  2. c++

C++で参照を再代入することは可能か?

2023-11-01 10:24:16

質問

参照はその場で初期化されなければならず、再び初期化することはできないと、あらゆるところで読みました。

私の理解を試すために、次のような小さなプログラムを書きました。実際に参照を再割り当てすることに成功したように見えます。どなたか、私のプログラムで実際に何が起こっているのか、説明していただけませんか。

#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;

int main()
{
    int i = 5, j = 9;

    int &ri = i;
    cout << " ri is : " << ri  <<"\n";

    i = 10;
    cout << " ri is : " << ri  << "\n";

    ri = j; // >>> Is this not reassigning the reference? <<<
    cout << " ri is : " << ri  <<"\n";

    getch();
    return 0;
}

コードはうまくコンパイルされ、出力は私が期待したとおりになりました。

ri is : 5
ri is : 10
ri is : 9

どのように解決するのですか?

<ブロッククオート

ri = j; // >>> Is this not reassigning the reference? <<<

いいえ。 ri への参照であることに変わりはありません。 i - を表示することでこれを証明できます。 &ri&i で、同じアドレスであることがわかります。

あなたがしたことは i を通して 参照 ri . 印刷する i の後に、このように表示されます。

また、比較のために const int &cri = i; を作成しても、それに割り当てることはできません。