C++11——右值引用

C++中的引用允许你为以及存在的对象创建一个新的名字。对新引用所做的访问和修改操作,都会影响到它的原型(被引用的对象)。
例如:

int var = 2;
int& ref = var;
ref = 9;
// ref = 9;
// var = 9;

这种方式被称为左值引用——对左值的引用。左值这个概念来源与C语言,指的是可以放在赋值表达式左边的事物——在栈上或堆上分配的命名对象,或者其它有明确的内存地址的对象成员。右值这个概念也来自C语言,值的是可以出现在赋值表达式右侧的对象——例如,文字常量和临时变量。因此,左值引用只能被绑定在左值上,而不是右值。
例如下面这样写是错的:

// 编译错误
int& num = 1;

但是你可以使用下面的这种方式来对一个右值进行引用:

const int& i = 1;

i是一个const左值,之所以可以这样写,是因为发生了隐式转换。就像我们可以对左值的const引用创建临时性的对象,并将其作为参数传递给函数。比如:

void print(const string& s);
print("hello"); //创建了string的对象

在C++11标准中介绍了右值引用(rvalue reference),这种方式只能绑定右值,不能绑定左值,它通过两个&&来进行声明:

int&& i = 1;
int j = 42;
int&& k = j;    //编译错误

因此可以通过函数重载的方式来确定:函数有左值或右值为参数的时候,看是否能被同名且对应参数为左值或有值引用的函数所重载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值