我一直很疑惑,實參初始化形參時,是通過拷貝構造函數還是賦值運算符。
今天來做一個測試。
首先創建一個類,實現其構造函數、拷貝構造函數、賦值運算符函數。
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