一点疑惑

hbvanguard 2006-06-20 02:37:46
有一段运行正常的程序是这样的:


例3-15:分析以下程序的执行结果
#include <iostream.h>
class Location {
public :
Location ( int xx=0, int yy=0 )
{ X=xx ; Y=yy;
cout << "Object constructed." << endl ; }
Location ( Location & p ) ;
~Location ( )
{ cout << X << "," << Y << "Object destroyed." << endl ; }
int GetX ( ) { return X ; }
int GetY ( ) { return Y ; }

private : int X , Y ;
} ;
Location :: Location ( Location & p )
{ X= p.X ; Y=p.Y ; cout << "Copy_constructor called." << endl ; }
Location g ( )
{ Location A ( 1 , 2 ) ; return A ; }//此处的A为局部变量为什么能返回呢?而且将调用拷贝构造函数??????
void main ( )
{ Location B ;
B = g ( ) ; } //给对象 B 赋值
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
netToCom 2006-06-20
  • 打赏
  • 举报
回复
个人理解:
关键是return语句,由于A为你自己定义的对象,且提供了拷贝构造函数,
return语句将返回对象赋值于调用者,这时A就相当与一个右值(应该是编译器这么认为),
此时当然就要调用A对象的拷贝构造函数了;然后A对象才离开作用区,则开始调用起析构函数。

我是这么理解的 ,,呵呵,,共同进步!
WingForce 2006-06-20
  • 打赏
  • 举报
回复
此处的A为局部变量为什么能返回呢?而且将调用拷贝构造函数??????

局部变量为什么不能返回???

如果这样,把函数返回一个类对象改成任何一个内置类型也不能正常工作了,那要函数返回值干吗?

int foo()
{
int ret = 1;
return ret;
}

int a = foo();


ll_dzl 2006-06-20
  • 打赏
  • 举报
回复
为什么不能返回?一你把它看作一个普通变量,二再看一下构造函数及赋值操作符

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧