关于C++中类成员函数返回值的疑问
在《标准C++宝典》中有一个例子,下面是其中的一部分:Date&operator=(constDate&dt){ndays=dt.ndays;return*this;}D...
在《标准C++宝典》中有一个例子,下面是其中的一部分: Date& operator = (const Date& dt) { ndays = dt.ndays; return *this; } Date operator + (int n)const { Date dt(*this); dt += n; return dt; } 对于这个例子,我有两个疑问,请高手帮忙解答一下: (1)一个返回的是Date类的临时对象,一个返回的是Date类对象的引用,这两种返回值有什么区别?在什么情况下应该返回引用,什么情况下应该直接返回对象? (2)对于返回临时对象的那个例子,dt是一个局部变量,生存周期应该只在函数调用中。在函数退出时,该变量应该会被销毁。那么这种情况下,这个函数如何把返回值传递给被调函数?(我记得C语言中不能返回函数内部的局部数组变量也是这样的原因,何以C++这里可以这样返回?)
展开
1个回答
展开全部
问题1:返回Date临时对象的时候,会在内存中临时创建一个Date对象,这个对象是临时性的,当所在的语句结束之后就会被收回,就是不能再用了。而返回Date类对象的引用的时候,返回的是该对象本身。
比如你的第一个函数,返回的是this对象本身,所以可以对其进行操作,比如可以这样操作:dateA
=
dateB
=
dateC;
//这三个对象都是Date类型,=运算符从右边开始往左运算,首先将dateC赋值给dateB,然后返回dateB本身(因为函数返回的是对*this的引用),然后将dateB赋值给dateA,返回dateA本身。
问题2:在函数结束的时候dt确实是被销毁了,但是在销毁之前,会在内存中临时创建一个Date对象(创建的类型要看返回类型,这里返回是的Date类型,所以临时创建的对象也是Date类型),然后将dt赋值给该临时对象,然后dt就会被销毁了。所以最后传递的值是这个临时对象。这个临时对象的寿命也是很短的,所在语句结束之后就不能用了。
比如你的第一个函数,返回的是this对象本身,所以可以对其进行操作,比如可以这样操作:dateA
=
dateB
=
dateC;
//这三个对象都是Date类型,=运算符从右边开始往左运算,首先将dateC赋值给dateB,然后返回dateB本身(因为函数返回的是对*this的引用),然后将dateB赋值给dateA,返回dateA本身。
问题2:在函数结束的时候dt确实是被销毁了,但是在销毁之前,会在内存中临时创建一个Date对象(创建的类型要看返回类型,这里返回是的Date类型,所以临时创建的对象也是Date类型),然后将dt赋值给该临时对象,然后dt就会被销毁了。所以最后传递的值是这个临时对象。这个临时对象的寿命也是很短的,所在语句结束之后就不能用了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询