本文主要是介绍论左值与右值和常量与变量之间的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1. 常见错误
2. 准确定义
3.结论
1. 常见错误
左值就是在等号左边的值,右值是等号右边的值。
那么常量就是右值了?!
no!no!no!
2. 准确定义
- 泛左值 (glvalue)(“泛化 (generalized)”的左值)是一个求值可确定某个对象或函数的标识的表达式(简单说就是可以寻地址的数据 (locator value));
- 亡值 (xvalue)(“将亡 (expiring)”的值)是代表它的资源能够被重新使用的对象或位域的泛左值(不可寻址的数据或用来读的数据(
read value)
);- 左值 (lvalue) 是并非亡值的泛左值;
- 纯右值 (prvalue)(“纯 (pure)”的右值)是求值符合下列之一的表达式:
- 计算某个运算符的操作数的值(这种纯右值没有结果对象);
- 初始化某个对象(称这种纯右值有一个结果对象);
结果对象可以是变量,由 new 表达式创建的对象,由临时量实质化创建的临时对象,或者前述三类对象的成员。注意,非 void 的弃值表达式有结果对象(即被实质化的临时量)。并且在作为 decltype 的操作数以外的情况下,每个类类型或数组类型的纯右值都有结果对象。
- 右值 (rvalue) 是纯右值或者亡值;
3.结论
那么,
const int kTMP = 0;
一定是左值了。
但
0
就是右值了。
这篇关于论左值与右值和常量与变量之间的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!