左值
定义:从字面上说所谓的左值就是能在赋值符号的左边出现的数值,在内存中占有一块空间,并且其中存储的内容可以被改变
- 左值引用:左值引用就是对一个左值进行引用的类型
//无论是声明一个左值引用还是右值引用,都必须立即进行初始化。
右值
定义:右值就是可以在赋值符号右边出现的数值,仅仅涉及到数值
- 右值引用:右值引用就是对一个右值进行引用的类型
为了支持移动操作,新标准引入了一种新的引用类型——右值引用(rvalue referrence)。
//无论是声明一个左值引用还是右值引用,都必须立即进行初始化。
所谓右值引用就是必须绑定到右值的引用。我们通过&&而不是&来获得右值引用。如我们将要看到的,右值引用有一个重要的性质——可以绑定到一个即将销毁的对象。
因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。
类似任何引用,一个右值引用也不过是某一个对象的另一个名字而已。如我们所知,对于左值引用,我们不能将其绑定到需要转换的表达式、字面常量或是返回右值的表达式。
右值引用有着完全相反的特性:我们可以将一个右值引用绑定到这类表达式上,但不能将一个右值引用直接绑定到一个左值上:
- 1.constexpr和常量表达式
常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定
2.字面值常量
字面值常量(literal constant),“字面值”是指只能用它的值称呼它,“常量”是指其值不能修改。每个字面值都有相应的类型,只有内置类型存在字面值。
(1. 整形字面值规则)
(2. 浮点字面值规则)
(3. 布尔字面值和字符字面值)
(4. 非打印字符和转义序列)
(5. 字符串字面值)
(6. 字符串字面值的连接)