首页 > 编程 > C++ > 正文

C++中rvalue和lvalue详悉

2019-11-06 06:40:07
字体:
来源:转载
供稿:网友

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

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 


上一篇:c++语言中类型的转换

下一篇:c++作业2

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选