关于C++构造函数的疑问
求助关于C++构造函数的疑问
#include<iostream>
using namespace std;
class A
{
public:
A():m(10)
{
cout<<"constuctor A is called!"<<endl;
}
int m;
};
A fun(A a)
{
cout<<"fun &a="<<&a<<endl;
return a;
}
int main()
{
A a;
a=fun(a);
cout<<"main &a="<<&a<<endl;
}
运行结果:
constuctor A is called!
fun &a=0012FF28;
main &a=0012FF7C
疑问1:
上述程序似乎为什么产生了两个对象,却只调用了一次构造函数?
疑问2:
上述程序应该产生了三个对象,1、执行语句 A a
2、用a对象初始化fun中的形参;
3、返回 fun 中局部对象 a时 应该会产生 一个临时对象
对于上述疑问,恳请高手解答,感激不尽!
------解决方案--------------------
要点提示:
1. 复制构造函数
2. RVO
------解决方案--------------------
#include<iostream>
using namespace std;
class A
{
public:
A():m(10)
{
cout<<"constuctor A is called!"<<endl;
}
int m;
};
A fun(A a)
{
cout<<"fun &a="<<&a<<endl;
return a;
}
int main()
{
A a;
a=fun(a);
cout<<"main &a="<<&a<<endl;
}
运行结果:
constuctor A is called!
fun &a=0012FF28;
main &a=0012FF7C
疑问1:
上述程序似乎为什么产生了两个对象,却只调用了一次构造函数?
疑问2:
上述程序应该产生了三个对象,1、执行语句 A a
2、用a对象初始化fun中的形参;
3、返回 fun 中局部对象 a时 应该会产生 一个临时对象
对于上述疑问,恳请高手解答,感激不尽!
------解决方案--------------------
要点提示:
1. 复制构造函数
2. RVO
------解决方案--------------------
class A将A类改成这样,你就明白了!
{
public:
A():m(10)
{
cout<<"constuctor A is called!"<<endl;
}
A(const A&){cout<< "A(const A&)" <<endl;}
A& operator =(const A&) {cout<< "operator =(const A&)" <<endl;return *this;}
int m;
};