价值范畴意义

根据这些表达式的结果,为 C++中的表达式分配一个特定的值类别。表达式的值类别可以影响 C++函数重载决策。

值类别确定关于表达式的两个重要但独立的属性。一个属性是表达式是否具有同一性。如果表达式引用具有变量名称的对象,则该表达式具有标识。变量名可能不包含在表达式中,但对象仍然可以包含一个。

另一个属性是隐式移出表达式的值是否合法。或者更具体地说,表达式在用作函数参数时是否将绑定到 r 值参数类型。

C++定义了 3 个值类别,它们代表了这些属性的有用组合:左值(具有标识但不可移动的表达式),xvalue(具有可移动标识的表达式)和 prvalue(没有可移动标识的表达式)。C++没有没有标识且无法移动的表达式。

C++定义了另外两个值类别,每个值类别仅基于以下属性之一:glvalue(带有标识的表达式)和 rvalue(可以移动的表达式)。这些作为先前类别的有用分组。

此图表用作说明:

StackOverflow 文档