细说C++(二十四):左值与右值 11新特性“右值引用”

左值

定义:从字面上说所谓的左值就是能在赋值符号的左边出现的数值,在内存中占有一块空间,并且其中存储的内容可以被改变

  • 左值引用:左值引用就是对一个左值进行引用的类型
    //无论是声明一个左值引用还是右值引用,都必须立即进行初始化。
右值

定义:右值就是可以在赋值符号右边出现的数值,仅仅涉及到数值

  • 右值引用:右值引用就是对一个右值进行引用的类型
    为了支持移动操作,新标准引入了一种新的引用类型——右值引用(rvalue referrence)。
    //无论是声明一个左值引用还是右值引用,都必须立即进行初始化。

所谓右值引用就是必须绑定到右值的引用。我们通过&&而不是&来获得右值引用。如我们将要看到的,右值引用有一个重要的性质——可以绑定到一个即将销毁的对象。
  因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。

类似任何引用,一个右值引用也不过是某一个对象的另一个名字而已。如我们所知,对于左值引用,我们不能将其绑定到需要转换的表达式、字面常量或是返回右值的表达式。
右值引用有着完全相反的特性:我们可以将一个右值引用绑定到这类表达式上,但不能将一个右值引用直接绑定到一个左值上:

  • 1.constexpr和常量表达式

常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
 一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定
 
 2.字面值常量 
 字面值常量(literal constant),“字面值”是指只能用它的值称呼它,“常量”是指其值不能修改。每个字面值都有相应的类型,只有内置类型存在字面值。
(1. 整形字面值规则)
(2. 浮点字面值规则)
(3. 布尔字面值和字符字面值)
(4. 非打印字符和转义序列)
(5. 字符串字面值)
(6. 字符串字面值的连接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值