Scottの最後のマスターピースのC++ 11と14に関する普遍的なリファレンスについては、lvalueまたはrvalueのいずれかの型に割り当てられているにもかかわらず参照パラメータには、通過した引数の型特性に基づいてl/rvalueに推論できる汎用参照の間に何かがあります。私は右辺値としてのpを作るもの普遍的な基準として、パラメータになりますが、typeパラメータconst T&& p
へのconstを追加する理由は私にはクリアされない一つのことは理解できますなぜ `const`を追加すると汎用の参照がrvalueになるのですか
template<typename T>
void f(T&& param); // param is an universal reference
template<typename T>
void f(const T&& param); // param is an rvalue reference
をconst
は、以上のことをしていこれは参照パラメータに割り当てられます。
OPを混乱させた_Effective Modern C++ _のItem 24の部分に戻って、スコットは、型推論の文脈の中でrvalue参照となる(ゆるく)普遍的な参照を記述する_。上記の14.8.2.1標準引用符の最初の(強調されていない)文(_ "Pがcv修飾型であれば、P型の最上位レベルのcv修飾子**は型控除**" _のために無視されます) 「「const」修飾子の単純な存在でさえも、参照が普遍的であることから不適格とするには十分であるというスコットの声明を説明している。_(本からの引用、項目24) – dfri
@dfriありがとう、私は近くにEMC++のデジタルコピーを持っていなかった。 – TemplateRex
その理由についてもっと動機づけることがあります:時々、私たちは言うべきことがあります:左辺値にのみバインドしないでください: 'template void cref(const T &&)= delete;'。 –