拷贝构造函数什么时候被调用?程序以及结果如下:
#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的拷贝构造函数被调用。请高手解答。 展开
#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的拷贝构造函数被调用。请高手解答。 展开
展开全部
因为你在func()里面调用构造函数时 A b(4)参数类型为 int ,调用第一个构造函数。
可以这么修改
A func()
{
A b(4);
A d(b);
return d;
}
就没问题了
没看清楚问题,不过我把你的代码直接copy过来,在vs2012 下运行,没有问题,拷贝构造函数被调用,可能是编译环境的问题吧
可以这么修改
A func()
{
A b(4);
A d(b);
return d;
}
就没问题了
没看清楚问题,不过我把你的代码直接copy过来,在vs2012 下运行,没有问题,拷贝构造函数被调用,可能是编译环境的问题吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询