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

标签 c++ rvalue lvalue

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

如果我们有 a=5; 我知道 5 是一个文字,因此它是一个 R 值。 a 是一个 L 值。同样适用于 b=5;

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

会发生什么

我现在可以说以下吗?

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

a 的 R 值是多少?

最佳答案

这取决于。内置的 operator= 返回赋值左侧的左值引用。所以,如果 abint,那么 (b = 5) 是一个左值表达式,你将该左值分配给 a,其中 ab 都是左值,5 是纯右值。

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

如果您想将左值转换为右值,那么您可以使用 std::move .

关于c++ - R 和 L 值是否与其上下文有关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450142/

相关文章:

c++ - 将 CMake 对象库与共享库相结合

c++ - 使用 `void*` 将右值引用绑定(bind)到左值

与前置和后置增量运算符混淆

c++ - lambda 表达式转换

c++ - 高级和低级编程语言之间的关系

c# - 确定性应用程序中的偏差

c++ - 什么时候计算右值?

c++ - 如何防止重复长右值

c++ - 如何使用 `Function Call Operator` 将 `rvalue` 类型加载到我的对象?

c - 如何给通过指针运算计算出的内存地址赋值?