Avatar ·

什么是C++11中的rvalue、lvalue、xvalue、glvalue和prvalue?

我正在学习C++11,遇到了这些新术语:rvalue、lvalue、xvalue、glvalue和prvalue。以前在旧版C++中,我以为一切很简单:lvalue是赋值左侧的东西(例如变量),而rvalue是右侧的东西(例如数字42)。但随着移动语义和std::move的出现,事情变得复杂了。 例如,我写了这样的代码: ```cpp int x = 10; // x — lvalue, 10 — prvalue int&& rref = std::move(x); // std::move(x)是什么?rref呢? int y = x + 5; // (x + 5)是什么? ``` 我听说有五个类别,但不知道如何在实际中区分它们。文档中提到了“身份”和“可移动性”,但我需要简单的例子。为什么std::move(x)返回rvalue,尽管x是lvalue?xvalue又是什么?请为初学者解释,并附上代码示例。 我认为这对于理解move语义和完美转发很重要。感谢详细分析!