decltype(1 + 2)是否声明一个xvalue或/或prvalue?C++ 11:“decltype(1 + 2)”声明一个xvalue还是一个prvalue?
cppreference说,decltype(表情)将宣布: 1中。T & &如果表达式是x值 2.■如果表达式是prvalue 把t &如果表达式是左值
但我的问题是:如何生成一个表达式是一个xvalue?我想,返回值和临时对象应该是x值,但实际上他们似乎是x值,在我的实验:
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(我+ 1 )声明第(i + 1)作为prvalue
因为如果它是一个x值,然后decltype得到Ť& &,不能结合到的“i”的左侧值可变。 decltype(f())也给我f()作为一个prvalue也很奇怪吗?
所以我的问题是:如何写一个表达式,以便decltype(表达式)给我一个xvalue? 谢谢。
http://en.cppreference.com/w/cpp/language/value_category#xvalue – user2357112
你似乎混淆了几个概念。你不能“声明”一个值类别。你用类型声明变量。值类别是表达式的属性。 –