R 和 L 值是否与其上下文有关?

Are R & L-values relative to its context?

所以假设我们用 C++ 编写以下内容:a=b=5; 这基本上意味着 a=(b=5);

如果我们有 a=5; 我知道 5 是一个文字,因此它是一个 R 值。 a 是一个左值。 b=5;

也一样

我现在想知道,如果我们分别写 a=b=5; a=(b=5);

会发生什么

我现在可以说下面的话吗?

对于 ab=5 是一个 R 值,a 是一个 L 值。此外,b 是 L 值,5 是 R 值。

a 的 R 值是多少?

这取决于。内置的 operator= return 是对赋值左侧的左值引用。因此,如果 abint,则 (b = 5) 是一个左值表达式,您将该左值分配给 a,其中 a b 都是左值,5 是纯右值。

这对于重载 operator= 通常也是相同的,因为大多数人 return 是左值引用,但它不一定是。

如果要将左值转换为右值,则使用 std::move