Hin*_*sum 2 c++ decltype xvalue c++11 prvalue
decltype(1 + 2)是否声明了xvalue或prvalue?
cppreference说,decltype(表达式)将声明:1.T && if表达式是否是xvalue 2.如果表达式是prvalue 3. T&if表达式是lvalue
但我的问题是:如何生成一个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;
}
Run Code Online (Sandbox Code Playgroud)
这个程序编译:我可以判断
decltype(i + 1)将(i + 1)声明为prvalue
因为如果它是一个xvalue,那么decltype得到T &&,它不能绑定到左值变量"i".decltype(f())也给我f()作为prvalue也很奇怪?
所以我的问题是:如何写一个表达式,以便decltype(表达式)给我一个xvalue?谢谢.
Decltype解析为一个类型,而不是一个表达式 - 你不能说它"声明一个prvalue"或类似的东西.
i+1是一个prvalue,而不是id-expression.因此decltype产生一个非引用类型:decltype(i+1) j = i;意味着int j = i;.
第二种情况类似; f()是一个prvalue,decltype(f())也是S.
要decltype(expression)解析为右值引用类型,表达式必须是xvalue.例如decltype( std::move(f()) )是S&&.
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |