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);
会发生什么
我现在可以说下面的话吗?
对于 a
,b=5
是一个 R 值,a
是一个 L 值。此外,b
是 L 值,5
是 R 值。
a
的 R 值是多少?
这取决于。内置的 operator=
return 是对赋值左侧的左值引用。因此,如果 a
和 b
是 int
,则 (b = 5)
是一个左值表达式,您将该左值分配给 a
,其中 a
b
都是左值,5
是纯右值。
这对于重载 operator=
通常也是相同的,因为大多数人 return 是左值引用,但它不一定是。
如果要将左值转换为右值,则使用 std::move
。
所以假设我们用 C++ 编写以下内容:a=b=5;
这基本上意味着 a=(b=5);
如果我们有 a=5;
我知道 5 是一个文字,因此它是一个 R 值。 a
是一个左值。 b=5;
我现在想知道,如果我们分别写 a=b=5;
a=(b=5);
我现在可以说下面的话吗?
对于 a
,b=5
是一个 R 值,a
是一个 L 值。此外,b
是 L 值,5
是 R 值。
a
的 R 值是多少?
这取决于。内置的 operator=
return 是对赋值左侧的左值引用。因此,如果 a
和 b
是 int
,则 (b = 5)
是一个左值表达式,您将该左值分配给 a
,其中 a
b
都是左值,5
是纯右值。
这对于重载 operator=
通常也是相同的,因为大多数人 return 是左值引用,但它不一定是。
如果要将左值转换为右值,则使用 std::move
。