形如decltype(1+2)是声明了一个xvalue还是一个prvalue?
cppreference上面说,decltype(expression)的用法是,1.如果expression是一个xvalue,decltype就是一个右值引用T&&
2.如果expression是一个prvalue, decltype就是一个值类型T
3.如果expression是一个lvalue, decltype就是一个左值引用T&
但我的问题是: 什么样的expression算是xvalue呢? 返回值和临时变量都应该算xvalue吧.
decltype(1+1)返回的,是xvalue还是prvalue?
int i=1; decltype(i+1)返回的,是xvalue还是prvalue?
然后我试了一下,貌似都是prvalue:
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)里面的i+1是一个prvalue,decltype声明的是T。
1.因为如果decltype声明了右值引用,那么j=i是编译不过的,不能把一个左值类型的变量绑定到一个右值引用对吧。
2.decltype(f()),拿到函数返回值,仍然是一个prvalue,而不是xvalue?
所以我的疑惑是:
如何写一个decltype(expression),得到一个xvalue?
http://en.cppreference.com/w/cpp/language/value_category
页:
[1]