decltype(1+2) 是否声明了 xvalue 或 prvalue?
cppreference 说,decltype(expression) 将声明: 1. T&& 如果表达式是 xvalue 2. T 如果表达式是纯右值 3. T& 如果表达式是左值
但我的问题是:如何生成一个 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) 将 (i+1) 声明为纯右值
因为如果它是一个 xvalue,那么 decltype 会得到 T&&,它不能绑定到“i”的左值变量。decltype(f()) 也给我 f() 作为prvalue也很奇怪?
所以我的问题是:如何编写一个表达式,以便 decltype(expression) 给我一个 xvalue?谢谢。