C++中rvalue和lvalue详悉

以下内容是参考书籍以及晚上的内容,整理而成,仅供参考~~

lvalue和rvalue

在计算机的远古时代,变量的lvalue和rvalue是指:
lvalue:变量在内存中的位置。通过它能够找到内存中存放的变量(location value);
rvalue:存放在lvalue对应的内存中的东西(register value);
C++中的每个表达式要么是lvalue要么是rvalue。lvalue表示一个内存位置,而rvalue表示计算表达式的结果。
rvalue引用是对有名称变量的引用,并允许变量表示的内存通过lvalue引用来访问。
rvalue引用是对包含表达式结果的内存位置的引用。

lvalue引用:

使用lvalue引用形参,可以编写直接访问调用者实参的函数,避免了按值传递中的隐式复制。若不修改实参,只需要给lvalue引用类型使用const修饰符,以避免意外修改参数。无论是按值传递、按址传递参数或引用都是编译器的规则,我们需要熟悉参数在不同情况下的传递,好的理解方式就是输出地址来观察。

#include <iostream>    
using namespace std;

void add_1(int & num)
{
	num += 1;
}

int main()
{
	int v = 6;
	add_1(v);
	cout <<"v="<< v << endl;
	return 0;
}
输出结果:v=7.

rvalue引用:

首先,举一个报错的例子:
#include <iostream>    
using namespace std;

void add_1(int && num)
{
	num += 1;
}
int main()
{
	int v = 6;
	add_1(v);
	cout << "v="<<v << endl;
	return 0;
}
编译会报错: 无法将左值绑定到右值引用。
因为:lvalue不能通过rvalue引用,有rvalue引用形参的函数只能通过rvalue实参来调用,后面列举正确编译的例子:
#include <iostream>    
using namespace std;

void add_1(int && num)
{
	num += 1;
	cout << "num=" << num << endl;
}
int main()
{
	int v = 6;
	int s = 4;
	add_1(v+s);
	cout << "v="<<v << endl;
	return 0;
}
运行结果:num=11,v=6.

参考:

http://blog.chinaunix.net/uid-7471615-id-83794.html

http://blog.csdn.net/rogerhe/article/details/6410993 

http://www.cnblogs.com/yunqie/p/5892252.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值