拷贝构造函数什么时候被调用?程序以及结果如下:

#include<iostream>#include<stdlib.h>usingnamespacestd;classA{public:intv;A(inti){v=i;... #include<iostream>
#include<stdlib.h>
using namespace std;
class A
{
public:
int v;
A(int i){v = i;}
A(const A &a)
{
v = a.v;
cout<<"copy constructor called!";
}
};
A func()
{
A b(4);
return b;
}
int main()
{
cout<<func().v<<endl;
system("pause");
return 0;
}
结果:
4

PS:并没有预料的调用拷贝构造函数而出现“copy constructor called!”,和C++原理不符合啊。。。编译环境是DEVC++
补充说明:我的问题在于根据C++的规则:如果一个函数的返回值为类A的对象,那么当函数返回时,类A的拷贝构造函数被调用。请关注我所说的:关键点在函数返回时类A的拷贝构造函数被调用。请高手解答。
展开
 我来答
百度网友84f53f9
2014-03-26 · 超过13用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:32.9万
展开全部
因为你在func()里面调用构造函数时 A b(4)参数类型为 int ,调用第一个构造函数。
可以这么修改
A func()
{
A b(4);
A d(b);
return d;
}

就没问题了

没看清楚问题,不过我把你的代码直接copy过来,在vs2012 下运行,没有问题,拷贝构造函数被调用,可能是编译环境的问题吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2014-03-26 · TA获得超过8609个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3463万
展开全部
拷贝构造函数调用发生在三处,一是,按值传递类参数,二是函数返回类变量,三是编译器也会调用(随着编译器不同而不同,这是难以说清楚的)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式