【发布时间】:2019-11-05 01:14:32
【问题描述】:
我试图了解价值类别的差异,我发现了微软的this document。
- An xvalue is a glvalue that [...]
- An lvalue is a glvalue that is not an xvalue.
- An rvalue is a prvalue or an xvalue.
为什么xvalue 是glvalue?他们为什么不说An xvalue is an glvalue or an rvalue?在我看来,这个措辞是故意表达的,但我不明白为什么
【问题讨论】:
-
@ShadowRanger 这不是重复的,抱歉
-
这是 xvalue 的 the same wording on cppreference。
-
基本类别是左值,xvalue,prvalue,它们是互斥的。 “glvalue”和“rvalue”类别是统称。您建议的更改将意味着所有 glvalues 都是 xvalues(这是不正确的 - 实际上所有 xvalues 都是 glvalues 但反之亦然)
-
该图试图说明
glvalue = lvalue + xvalue和rvalue = xvalue + prvalue。有可能同时是glvalue、xvalue和rvalue。如果您将该图误认为是维恩图并得出结论认为glvalue和rvalue框之间没有重叠意味着它们是互斥的,这可能会产生误导。 -
它的措辞可能是这样的,因为创建 xvalues 背后的全部动机是为了移动语义。