什么是左值
What is an lvalue?
可能重复:
什么是rvalues、lvalues、xvalues、glvalues和prvalues?
C++标准主要在题为"表达式"的第5章中定义了哪些表达式是左值,哪些是右值。我读过那一章,我相信我能正确区分左值和右值。
然而,在我读过好的C++书籍和/或标准之前,我曾经认为左值是可以站在赋值左侧的东西,而右值是不能的东西。显然,这个天真的定义有很多反例。过了一段时间,我认为左值是有地址的东西,而右值是没有地址的东西。这似乎也有反例,比如说,一些临时对象,显然,它们确实有地址。
我的一个朋友问我什么是左值,什么是右值。我大致告诉了他是什么,他要求得到一个更完整的答案。我叫他去读标准书。他拒绝调戏自己的大脑,并表示他确信某个东西必须有的必要和充分条件才能成为左值。
有吗
例如,一个左值是一个非常量引用可以绑定到的东西。但这个并不令人满意。我在寻找更明显的东西,更容易解释的东西,而不需要考虑每种表达类型。。。
我希望问题是清楚的。
简单地说,右值是指表达式结果无法通过所述表达式的末尾。左值会。这一基本原则是启用移动语义和重新值引用的原因——您可以毫无问题地修改它们,因为您知道对象的生命已经结束。
我发现将lvalue视为"有名称的事物"是最有用的简化。表达式++x
是一个左值,名称为x
。相比之下,rvalue
是"没有名字的东西"。x++
是一个右值,因为它产生一些未命名的值。
l值是指内存位置。这是我能说的最简单的一句话。r值可以是l值r值只是表达式或常数的结果
可能只是有点混淆了可修改的左值和非左值。右值可以是左值,也可以是非左值。术语可修改的左值是在引入const修饰符之后使用的(参见维基百科关于值的条目)在C++中,每个表达式都返回一个左值、右值或无值。当左值显示为右值时,它会隐式转换为右值(请参阅IBM关于值类型的介绍)
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 我应该使用什么来代替void作为变体中的替代类型之一
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用