C++0x 11
■ このスレッドは過去ログ倉庫に格納されています
0459デフォルトの名無しさん
2010/11/03(水) 14:24:26いまいちはっきりしないからだと思うけど
rvalue と rvalue reference が違うことを念頭に置いて
以下の原文を読むとわかる…かもしれない。
3.10-1 lvalue,xvalue,prvalue の図
5-6 名前付き右辺値参照は lvalue になる。
名前なしの(関数の戻り値とかの)右辺値参照は xvalue になる。
関数への右辺値参照は、名前のあるなしにかかわらず lvalue になる。
8.3.2-2 左辺値参照と右辺値参照は違う型だが、
明示的に注記されない限り両者は意味論的に同じ。
13.3.3.2-3
(暗黙の変換S1とS2がありうるとき、S1のほうが適用される条件)
- S1 と S2 が参照束縛で、
S1 は rvalue (つまり xvalueかprvalue)を右辺値参照に束縛し、
S2 は左辺値参照を束縛するとき。
- S1 と S2 が参照束縛で、両者が同じ型を参照していて、
S1 のほうが const/volatile の修飾が少ないとき。
(片方が参照で、片方が値のときはあいまい)
ついでに
13.3.1-4 と -5 あたりで
struct A { void hage(); void hige()&; void hoge()&&; };
の違いがわかるはず。
■ このスレッドは過去ログ倉庫に格納されています