我是C++的新手,这是我的第一个问题,所以请耐心等待...我已经读了一段时间关于lvalue和rvalue的信息,我想我了解其中的大部分内容,但仍有点让我感到困惑。我的问题将是具体的
右值引用被认为是左值(我理解这一部分),但是例如,返回右值引用的函数被认为是右值(或特定于xvalue):
int x = 32;
int& Lref = x; // Lref is lvalue ... ok
int& funcA(); // calling funcA() is lvalue ... ok
int&& Rref = 32; // Rref is lvalue ... ok I got this
int&& funcB(); // calling funcB() is rvalue ... Why?
所以问题是:为什么将调用返回右值引用的funcB()视为右值?
提前致谢。
最佳答案
为了回答名义问题,“rvalue引用”是一种类型,而“xvalue”是一种表达。
他们不是。右值引用是类型,类型不是表达式,因此不能“考虑左值”。您指的是以下事实:如果表达式仅由T&&
类型的变量名组成,则它是T
类型的左值表达式。
最直接的答案是“根据定义”。函数的返回类型为T&&
的函数调用表达式是T
类型的xvalue表达式。至于动机,这正是使std::move
做到了所要做的事情:使任何具有迁移能力的表达式(也称为“右值类别”-参见http://en.cppreference.com/w/cpp/language/value_category)灌输。
关于c++ - rvalue引用和xvalue有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36557310/