decltype(1 + 2)はxvalueまたはprvalueを宣言していますか? 1. T & &を式は左辺値C++ 11: "decltype(1 + 2)"はxvalueまたはprvalueを宣言しますか?
しかし、私の質問であれば式は 3. T & prvalueであれば式ははxValue 2. Tの場合:
cppreferenceは、decltype(式)を宣言しますと言いますは:どのようにxvalueの式を生成するのですか?私は、戻り値と一時オブジェクトははxValueあるべきと仮定し、実際に彼らははxValueように見える、私の実験では:
struct S{};
S f();
int main()
{
int i=2;
decltype(i+1) j=i;
++j;
printf("i=%d\n",i);
S obj;
decltype(f()) k=obj;
return 0;
}
このプログラムはコンパイル:私はその
decltypeを判断することができ(I + 1 )prvalue
として(I + 1)を宣言し、それははxValueだ場合ので、その後、decltypeは、 "私" の左側の値変数にバインドすることはできませんT & &を取得します。 decltype(f())も私にfval(prvalue)を与えてくれるのは奇妙です。
私の質問は:decltype(expression)が私にxvalueを与えるように式を書く方法は?おかげさまで
http://en.cppreference.com/w/cpp/language/value_category#xvalue – user2357112
あなたはいくつかの概念を混乱させるようです。値カテゴリを宣言することはできません。型を持つ変数を宣言します。値カテゴリは式のプロパティです。 –