Namaran

Code daily. Without assist.

2026-09-07

rebind.cpp

#include <iostream>

int main() {
    int a = 1, b = 2;
    int &r = a;
    r = b;
    std::cout << a << " " << b << " " << (&r == &a) << "\n";
}

これは何を出力するでしょうか?

Answer

2 2 1(その後に改行)。int &r = a;raの別名になり、これは一度決まると変えられません。r = b;rbに向け直す(ポインタならr = &bで起きること)のではなく、rが指しているabの値を代入するだけです。そのためa2になり、&r == &aは最後まで真のままです。ポインタとの一番の違いはここで、ポインタなら再代入で指し先そのものを変えられますが、参照は初期化時に決まった対象への「書き込み専用の窓」であり続けます。