预备知识
值返回和引用返回:
1.值返回:返回类型为类class的值返回时,需要调用拷贝构造函数2.引用返回,不需要调用拷贝构造
如下代码中,
c=a+b的含义:从a内存空间内把a取出来,从b内存空间内把b取出来,把两个值取出来之后,放在左值c的内存空间内。
a+b=c的含义:把c取出来放在左边a+b的表达式内,但是a和b都有确定空间,a+b没有确定的内存空间,在临时空间内,然后把c放在该临时空间内,但是不行哒,因为临时空间不能长久存放,在表达式执行结束后就释放掉了,并不能够存储值。
int main()
{
int a=10,b=3;
int c=0;
c=a+b;//c=13
//a+b=c; 错误
}
可以作为左值:
++a //前加加
a=c //赋值号
左边可以引用返回
++a=c
a=11,++a=11,没有给表达式开辟临时单元,就把c的值放在a的存储单元
a=b=c;//赋值号(a=b):b->a,c->a;因此就可以作为左边
只能作为右值:
a++ //后加加
a+b //加法
a+b:值返回,只能在赋值号右边
总结:
加减乘除取余+-*/%等等,作为引用返回
私有数据成员在外部如何进行修改呢?(引用)
答:在public内写getI()函数,获得参数值m_i,然后在主函数内调用它
int &GetI()
return m_i;
主函数内:
a.GetI()=7;//修改为7
问:为什么需要返回引用,不能返回值呢?
答:因为值返回的是临时变量,没有确定的内存单元,不能放在赋值号左边,只能作为右值,而引用返回的是本身,不是临时变量,可以作为左值被修改。
问:如何优化代码,使返回值不可被修改?
答:返回如下const的引用类型
const int& GetI()
return m_i;
好处是返回时本身且不可被修改,仅是引用时才有意义