C++之右值引用

1. 左值引用&右值引用

首先简要了解下左值右值,直观简洁的解释如下:

  • 左值:定义的变量就是属于左值
  • 右值:字面量就是右值,函数返回值产生的临时对象都属于右值,这些值如果不用变量接收,这些右值将是无用的资源

1.1 左值引用

有关引用大家一定不陌生,引用可以说就是,变量的别名,但是之前说的引用都属于左值引用,简单回顾下左值引用,示例如下:

int number = 10;
// 引用定义的时候必须被初始化
int& lr_number = number;
const int c_number = 10;
// 此处会报错,const 变量不能用于非const引用
int& lr_c_number = c_number;
// 下面是ok的
const int& c_lr_c_number = c_number;
// 直接用右值初始左值引用将会报错,但是const引用可以直接接收右值
int& lr = 10;
const int& c_lr = 10;

1.2 右值引用

之前也提到右值是被认为无用的资源,但在某些情况下也会使用到右值,所以在C++11中使用使用右值引用来重用右值,右值引用的简单使用如下:

/*
 1. 右值引用的定义使用 &&
 2. 右值引用无法被左值初始化
 3. 右值引用被初始化后,改变了就变成了一个左值,可以被赋值
*/

int&& rr = 100;
int x = 100;
// 无法被左值初始化
int&&  rr1 = x;
// 初始化后可以被赋值,即改变量变成一个左值
rr = 200;

1.3 左值引用与右值引用的函数重载

左值引用右值引用在函数重载是会重载不同的版本,示例如下:

void reference(int& lref)
{
	cout << "left_reference\n" << endl;
}

void reference(const int& lref)
{
	cout << "const_left_reference\n" << endl;
}

void reference(int&& rref)
{
	cout << "right_reference\n" << endl;
}
int main()
{
	int test = 100;
	// 输出 left_reference
	reference(test);
	// 输出 right_reference
	// 注意这里涉及最优匹配问题,若没有第三个函数则会输出 const_left_reference
	reference(1000);
}

更为官方详细的上cppreference学习观看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值