これは間違いなく、好奇心によって主に引き起こされる厄介な質問です。私たちは次のことを持っていると仮定します。予想通りrvalue参照にリテラル定数を代入するとどうなりますか?
int x = 5;
int&& xref = std::move(x);
std::cout << "Before assignment x: " << x << std::endl;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment x: " << x << std::endl;
std::cout << "After assignment xref: " << xref << std::endl;
出力は次のようになります。
// Before assignment x: 5
// Before assignment xref: 5
// After assignment x: 10
// After assignment xref: 10
これは理にかなっています。 std::move
はx
をxvalueに変換し、そのメモリロケーションをxref
にバインドし、その内容を変更することができます。
int&& xref = 5;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment xref: " << xref << std::endl;
int x = 5;
std::cout << "After assignment x: " << x << std::endl;
出力が直感的である:
// Before assignment xref: 5
// After assignment xref: 10
// After assignment x: 5
この全体的な感覚を作る今、私たちは次のことを持って言うことができます。 5
はprvalueなので、定数リテラル5
をxref
にバインドすることができます。 xref
も変更可能であることが期待されます。また、定数の値が5
であることは変更できないと考えています(上記のスニペットの最後の2行には多少の意味があります)。
私の質問は、正確に何が起こっているのですか?定数リテラル5
の値を変更しないで、割り当てによって10
に変更されたことを知るには、xref
の十分なIDを保持していることをC++はどのように知っていますか?定数のリテラルにバインドされたときに新しい変数がxref
に代入されると作成されますか? constの参照のみがrvaluesに束縛される可能性があるので、この質問は決してC++ 03では出てこなかった。
ありがとうございました。これは私の質問と私が持っていただろうすべてのフォローアップの質問に答える。 – Klam
@Klam:Lightness Industriesのサービスのすべての部分。 –