64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class A
{
int i;
public:
A(int b=0):i(b){cout<<"构造"<<endl;}
A(A &B){i=B.i;cout<<"初始化"<<endl;}
A & operator=(A B){
i=B.i;
cout<<"="<<endl;
return *this;
}
int geti(){return i;}
};
int fun(A a)
{
return a.geti();
}
int main()
{
A a;
A x;
x=a;
A b(a);
A c=2; //构造一临时对象
cout<<fun(c)<<endl; //实参到形参用初始化
return 0;
}
A a;//直接调用构造函数 输出 “构造”
A x;//直接调用构造函数 输出 “构造”
x=a;//调用赋值操作符,由于重载的赋值操作符函数的参数不是引用类型,那么传递参数的时候,
//要调用拷贝构造函数进行值传递,则对应的输出就是 “初始化” “=”
A b(a);//直接调用拷贝构造函数 输出“初始化”
A c=2;// 先隐式调用构造函数,再调用拷贝构造函数,但编译器进行了优化,
//你能看的的结果就是只调用了构造函数,而没调用拷贝构造函数,由于进行了优化,所以你看
// 不到调用拷贝构造函数 对应的输出只有 “构造”
cout<<fun(c)<<endl; //进行参数传递的时候是值传递,直接调用拷贝构造函数 输出“初始化”