我一直很疑惑,实参初始化形参时,是通过拷贝构造函数还是赋值运算符。
今天来做一个测试。
首先创建一个类,实现其构造函数、拷贝构造函数、赋值运算符函数。
class A
{
public:
A() {
cout << "构造函数" << endl;
}
A(const A &a) {
cout << "拷贝构造函数" << endl;
}
A& operator=(const A& a) {
cout << "赋值运算符" << endl;
return *this;
}
};
一、值传递
定义一个值传递的函数。
void fun(A a) {}
调用
A a;
cout << "call fun" << endl;
fun(a);
结果:
构造函数
call fun
拷贝构造函数
结果出来了,是通过拷贝构造函数。
二、引用传递
定义一个引用传递的函数。
void fun(const A &a) {}
调用
A a;
cout << "call fun" << endl;
fun(a);
结果:
构造函数
call fun