请问构造函数执行了几次?

csuymj 2009-03-20 11:46:09
class A
{
public:
A(){cout<<"a"<<endl;}
~A(){cout<<"del a"<<endl;}
A(const A&){cout<<"construct a"<<endl;}
};



const A f(A &h)
{
A b=h;
cout<<"haha"<<endl;
return b;
}

int main()
{
A c;
A d=f(c);
}
...全文
261 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsf8605 2009-03-20
  • 打赏
  • 举报
回复
构造函数执行了3次。
创建对象c时调用构造函数A(),创建对象d时调用构造函数A(const A&),
调用函数f(A &h)后返回b后调用构造函数A(const A&)。
speeder53 2009-03-20
  • 打赏
  • 举报
回复
mk
csuymj 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengzhixi 的回复:]
A d是调用复制构造函数,还有那个f(c)的返回值也是调用的复制构造函数
[/Quote]

是呀,这样来说应该调用了三次,但为什么我执行的时候只显示两次构造函数的调用呢?
pengzhixi 2009-03-20
  • 打赏
  • 举报
回复
A d是调用复制构造函数,还有那个f(c)的返回值也是调用的复制构造函数
csuymj 2009-03-20
  • 打赏
  • 举报
回复
谢谢两位,但是我用VS得出的结果怎么只有两次构造函数的调用呀?只有局部对象b调用了,好像d没有调用呢?
Jarrys 2009-03-20
  • 打赏
  • 举报
回复
A c 调用了一次,
A d=f(c) 其中调用了副本构造函数一次,在f(C)函数中调用了初始化一个临时的对象(A b=h; )的副本构造函数,然后是返回对象时创建一次。
为了分清楚调用了副本构造函数还是赋值函数

A b=h; 宜这样写:A b(h);

A d=f(c);宜这样写:A d(f(c));

这样增加了代码的要读性

65,211

社区成员

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

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