在C / C++中命名“左值”和“右值”的背后是什么原因(我知道它们的功能)?

最佳答案

该标准提到了这一点:

也就是说,左值是可以分配的值,而右值是可以分配的值。
但是,这已逐渐远离事实。您无法分配的左值的一个简单示例是const变量。

const int x = 5;
x = 6; // Error
当涉及运算符重载时,甚至可以在分配的左侧显示一个右值。
我发现将左值引用为存储在内存中的对象,将右值引用为一个值(可能已从内存中读取)更有用。这些概念很好地反射(reflect)了这个想法。一些例子:
  • 可以将Lvalue-to-rvalue视为从内存中的对象读取值。
  • 大多数运算符都需要从左值到右值的转换,因为它们使用对象的值来计算结果。
  • 运算符的地址(&)需要一个左值,因为您只能在内存中获取某个地址。它不需要获取对象的值即可计算出其地址。
  • 执行std::move将左值表达式转换为右值表达式可以被认为是欺骗编译器,使其认为存储在内存中的对象实际上只是一个临时值。

  • 但是,这并非在所有情况下都成立。这只是一个合理的类比。

    关于c++ - “lvalue”和 “rvalue”命名背后的原因是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15765893/

    10-16 15:00