为什么他们不说xvalue是glvalue或rvalue?
因为尚未定义rvalue并且因为rvalue将根据xvalue进行定义。必须定义一个而不依赖另一个,以避免该定义成为循环。
此外,因为xvalue既是glvalue,又是rstrong。
此外,xvalue是不是lvalue的glvalue。更进一步,xvalue是不是prvalue的rvalue。最后,xvalue是既不是左值也不是prvalue的表达式。
我不明白为什么他们只在那句话中提到了gvalues
仅定义了glvalue和prvalue。请参阅前面提到的避免循环定义的内容。
什么是C ++中的xvalues
好吧,您已经看到了它的定义。该标准具有以下非规范性注释,可提供更多信息:
[basic.lval]
[注意:如果表达式是xvalue,则它是:
- 调用函数(无论是隐式还是显式)的结果,该函数的返回类型是对对象类型([expr.call])的右值引用,
- 强制转换为对对象类型([expr.type.conv],[expr.dynamic.cast],[expr.static.cast],[expr.reinterpret.cast],
[expr.const.cast],[expr.cast])
- 具有xvalue数组操作数([expr.sub])的下标操作,
- 类成员访问表达式,它指定非引用类型的非静态数据成员,其中对象表达式是一个
xvalue([expr.ref]),或
- 。*指向成员的表达式,其中第一个操作数是xvalue,第二个操作数是指向数据成员的指针
([expr.mptr.oper])。
,
该图可能会引起误解。
有左值,右值和右值。它们是互斥且完整的,即每个表达式都恰好是以下之一:lvalue,xvalue或prvalue。
lvalues和xvalues统称为glvalues
xvalues和prvalue统称为右值
所以xvalues既是glvalues又是rvalues。
本文链接:https://www.f2er.com/3162869.html