栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ 左值引用 右值引用 及 参数引用 & 与&&

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ 左值引用 右值引用 及 参数引用 & 与&&

先了解引用的作用:C++引用的作用_Lao_tan的博客-CSDN博客_c++引用的作用
右值引用_百度百科

C++中rvalue和lvalue详悉_Naruto_Q的博客-CSDN博客_lvalue rvalue

lvalue(left value)、rvalue(right value)是c语言编译过程中的用于描述等号左右值的符号。但是不能直观的通过在等号左边还是右边来判断是lvalue还是rvalue。能够取地址的,有名字的就是左值;反之,不能取地址,没有名字的就是右值。
左值(lvalue)可以是明确的变量。右值(rvalue)可以是临时变量,比如表达式、函数返回值、常量等。
int a = 1;
int b;

//下面为左值引用
int &aa0 = a;//ture
int &bb0 = b;//ture
int &aa1 =1;//error
int &aa1 = a+1;//error

//下面为右值引用

int &&a1 = a;//error
int &&b1 = b;//error
int &&a2  = 1;//ture
int &&a3 = a+1;//ture
int &&a4 = std::move(a);//ture  ,std::move()强制将左值转换成右值

//可以通过这个函数来判断是lvalue还是rvalue。
bool is_r_value(int &&)
{
    return true;
}
bool is_r_value(const int &)
{
    return false;
}


可以将C++的引用理解为指针常量。引用必须在声明时初始化,声明之外的赋值操作都是对引用所代指地址的内容访问。
C++参数中的& 和&& 都表示引用。左值的引用(lvalue)声明符号为”&”, 为了和左值区分,右值的引用(rvalue)声明符号为”&&”。 右值引用初始化之后引用本身变成了lvalue。所以无法进行“&&=&&”,从而达到右值引用传递的目的;但是左值引用可以传递,所以可以进行“&=&”。引用初始化必须满足lvalue = lvalue或者rvalue = rvalue。
不同编辑器表现可能会有差异。比如vs中对类或结构体操作时不一定非要满足lvalue = lvalue或者rvalue = rvalue的原则。

static int t = 0;
class Whore {
public:
    char buf[10];
    Whore()
    {
        itoa(t++,buf,10);
        cout << "Whore():" << buf<< endl;
    }
    ~Whore()
    {

        cout << "~Whore():"< 

C++临时变量的生命周期_snail0428的博客-CSDN博客_临时变量生命周期 
【C++】拷贝构造函数的调用时机_翼同学的博客-CSDN博客_c++拷贝构造函数什么时候调用 
返回引用的意义_陈小淘的博客-CSDN博客_函数返回引用的含义 
C++将返回值为引用有什么作用? - 知乎


(右值)引用可以改变临时变量的生命周期!!!函数返回类型绝对不能返回右值引用:T &&,返回右值引用再逻辑上不成立,且会造成非法越界访问。返回的左值引用也可能会造成越界访问,需要理解清楚左值引用所引用对象的生命周期。

static int t = 0;
class Whore {
public:
	char nickname[10];
	Whore()
	{
		_itoa(t++,buf,10);
		cout << "Whore():"<< nickname << endl;
	}
    Whore(Whore & w)
	{
		char buf[10];
		nickname = _itoa(t++, buf, 10);
		cout << "Whore(Whore & w):" << nickname << endl;
	}
	~Whore()
	{
		cout << "~Whore():"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号