注册 登录
编程论坛 C++教室

[求助]关于拷贝构造函数,急!!

allen303alle 发布于 2007-07-03 23:10, 982 次点击

widget t(widget u)
{
widget v(u);
widget w=v;
return w;
}
main ()
{
widget x;
widget y=t(t(x));
}


其中widget是一个类
请问这里一共调用了多少次拷贝构造函数?

[此贴子已经被作者于2007-7-3 23:41:01编辑过]

12 回复
#2
aipb20072007-07-03 23:32
widget t(widget u)//传参,返回各一次 2
{
widget v(u); //3
widget w=v; //4
widget return w;//这里前面widget什么意思?是不是错了?
}
main ()
{
widget x; //一次
widget y=t(t(x));//调用2次t
}

[此贴子已经被作者于2007-7-3 23:38:41编辑过]

#3
yuyunliuhen2007-07-04 09:46
嘿嘿,又是这个。。。
自己测试一下就知道了
#4
allen303alle2007-07-04 11:12


return前的是多打了

main中第一行只调用构造函数吧

widget w=v; 这个应该是重载的=,如果这个不算一次的话我觉得应该是6次

可是我们老师一定说是7次,下午就要考了,这个是必考的,所以老师不给我们解释

大家看下到底是多少次啊

#5
aipb20072007-07-04 11:47
构造函数调用8次,
拷贝构造的话7次。

widget x; //一次
这次调用构造函数。

int a = b;//这是构造不是赋值,相当于int a(b)

int a;
a = b; //这才是赋值。

注意区分。
#6
allen303alle2007-07-04 13:16
能说明具体是哪7次吗?

谢谢~~~
#7
野比2007-07-04 13:28
2楼已经说明了
#8
Arcticanimal2007-07-04 20:55

伙计们,是9次,靠偷懒不行啊!
以下是测试代码
#include <iostream.h>
class widget
{
public:
widget(){}
widget(const widget& cpy)
{
*this=cpy;
cout<<&cpy<<" 调用复制构造函数! 构造"<<this<<endl;
}
};

widget tf(widget _u)
{
widget v(_u);
widget w=v;
return w;
}
int main()
{
widget x;
widget y=tf(tf(x));
return 0;
}
测试结果:

[IMG]C:\Documents and Settings\Administrator\桌面\结果.jpg[/IMG]
#9
Arcticanimal2007-07-04 21:00
在构造函数里面加一句 "调用构造函数"
是以下结果
[IMG]C:\Documents and Settings\Administrator\桌面\结果.jpg[/IMG]
#10
aipb20072007-07-04 21:32
搞不清楚了,感觉该8次也。
不同的编译器给出来也不一样。
#11
野比2007-07-05 12:33

值得学习...

#12
allen303alle2007-07-05 14:15

如果w=v这种也算一 次 的话 ,我也觉得是9次啊,(每层t(x)4次,最后赋值给y一次就是9次啊,版主的8次怎么想的)

可是我们老师就是说7次,搞不懂啊,,是他错了吧~~

5搂的构造函数调用8次,拷贝构造调用7次什么意思哦

构造函数还有8次吗?

#13
aipb20072007-07-05 17:21
我笔误,错了,
应该是9次的8次。

widget y=t(t(x));
这里wifget y用t的返回构造这次我理解的不会调用copy constructor。

你的问题,我也测试过,在vc++6.0上确实是9次。
但是我也用dev-cpp测试过,确少了很多次,因为返回那里不调用。
我想就跟编译起解析有关了。
1