为什么返回对象时创建的临时对象没有调用构造函数?求指点.....
答案:4 悬赏:40
解决时间 2021-02-26 08:48
- 提问者网友:萌萌小主
- 2021-02-26 02:55
下面是我的一个测试程序
#include class A{public: int a; A(int m){a = m;cout<<"con"<运行后的结果是:
从运行结果上课,con是函数中临时变量调用的,而因返回对象而创建的临时对象并没用调用构造函数?为什么呢?求详细指点!!!!
最佳答案
- 二级知识专家网友:劳资的心禁止访问
- 2021-02-26 03:04
你错了,不是没调用构造函数,你只能说是没调用你定义的那个普通构造函数!因为你返回的临时变量是根据你的fun函数里的局部变量a创建的,所以会调用拷贝构造函数,而不是普通构造函数,你在你的类A里加上这个定义:
A(const A& param)
{
cout<<"con"<
}
那么就可以看到有两个con了,关于拷贝构造函数和普通构造函数网上一堆资料
全部回答
- 1楼网友:我的任性你不懂
- 2021-02-26 05:07
你返回又没有赋值
如果为A b=fun()才会被调用
因为执行了拷贝。你直接return 有没有给其它的对象,为什么会执行构造函数呢
即便调用,也应该调用的是拷贝构造函数或者operator=的构造函数,不是构造函数
- 2楼网友:统治我的世界
- 2021-02-26 04:53
return a;
这条语句调用拷贝构造函数构造一个临时变量,然后析够a,最后再把这个临时变量返回调用表达式那里。这个临时变量在语句fun();运行结束就自动析够了。所以运行结果是一次调用普通构造函数,两次调用析够函数。
对于这些代码产生的临时变量好的编译器就直接优化掉的。
如:
A b = fun();这句代码编译器可以直接使用fun局部变量b构造a,不用产生临时变量。
- 3楼网友:桃花别处起长歌
- 2021-02-26 03:28
如果你只是return一个0那就会有一个构造函数来生成返回的临时对象。
再看看别人怎么说的。
我要举报
大家都在看
推荐资讯