返回对象的引用的疑惑
一.string a= “abc”;//全局
string get()
{
return a;
}
1.string b =get();
2.string b;
b=get();
二.string a= “abc”;//全局
string & get()
{
return a;
}
1.string b =get();
2.string b;
b=get();
两个大情况:
情况一:return a的时候首先产生一个临时对象,然后调用复制构造函数把a复制给临时对象。1.string b =get();
然后又调用复制构造函数,将临时对象复制给b。
2.string b;
b=get();
然后又利用重载“=”号进行赋值。
情况二:retrun a的时候不产生临时对象。为什么不产生临时对象呢
1.string b =get();
b是a的引用,相当于string &b = a;//这块不知道理解是否对,但是我有点疑惑为啥返回的&在右边,现在跑左边了。
2.string b;
b=get();
这种就更不理解了。
因为int &a =b是正确的,但是
int a;
&a = b是错误的。
而这种情况该如何分析呢?