多くの人は、const
の値の参照がC++ 11言語の一部であることを知らない人がいます。 Thisブログ記事ではそれらについて説明していますが、バインディングルールについて間違っているようです。const &&のC++ 11バインディングルール
struct s {};
void f ( s&); // #1
void f (const s&); // #2
void f ( s&&); // #3
void f (const s&&); // #4
const s g();
s x;
const s cx;
f (s()); // rvalue #3, #4, #2
f (g()); // const rvalue #4, #2
f (x); // lvalue #1, #2
f (cx); // const lvalue #2
注非対称性::のconst左辺値参照は右辺値にバインドすることができますが、 のconst右辺値参照は左辺値にバインドできないブログを引用。 では、これによりconst左辺値参照がすべてのことを行うことができるようになります。右辺値参照は、複数の値を持つことができます(つまり、左辺値にバインドします)。
サンプルコードに関するコメントは、GCC 4.9(-std = C++ 14フラグセット)のインストール時にチェックアウトされているようです。したがって、ブログの文章とは異なり、const &&
はconst &
に、const &&
には、const &
は、const &
にのみバインドする必要があります。実際のルールは何ですか?この文脈で「結合」http://coliru.stacked-crooked.com/a/794bbb911d00596e
'のconst &&'(&&すなわち 'のconst'と '&&')のみ**右辺値にバインドできます**。ブログはテキストの通りです。 – bolov
@bolov、デモをご覧ください。何か不足していますか? – ThomasMcLeod
はい、それは 'const && 'への' const& 'バインディングです – bolov