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