- 论坛徽章:
- 2
|
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?
|
|