当然のことながら、これはコンパイルされませんリテラル番号は変更可能かどうか?</p> <pre><code>int &z = 3; // error: invalid initialization of non-const reference .... </code></pre> <p>をし、これがコンパイルされます:
const int &z = 3; // OK
を今、検討してください:
const int y = 3;
int && yrr = y; // const error (as you would expect)
int && yrr = move(y); // const error (as you would expect)
しかしこれらの次の行を私のためにコンパイルします。私はそうすべきではないと思う。
int && w = 3;
int && yrr = move(3);
void bar(int && x) {x = 10;}
bar(3);
最後の2行でリテラル3を変更できないのでしょうか? 3
とconst intの違いは何ですか?最後に、リテラルを「変更する」ことに危険がありますか?
(G ++ - -std=gnu++0x -Wall -Wextra
4.6(GCC)4.6.2)
私の自身の質問に答えるには: 'move(3)'の中で、おそらく3が最初にコピーされて一時的なintがステートメントの終わりに破棄されます。これは説明ですか? –
2番目の文には、const &z = 3;が指定されています。コンパイルされません。 –
ありがとうございます、@CJohnson、私は通常、ここに作業コードをコピー&ペーストします。しかし、私はその1つのライナーで不注意でした! –