我嘗試下面的程序:爲什麼在通過值傳遞給函數並將值傳遞給另一個構造函數時,構造函數的調用有什麼區別?
#include <iostream>
using namespace std;
class Type{
int i;
public:
Type() {cout << "type constructor "<<endl;}
Type (const Type &) { cout << "type copy constructor called" << endl;}
};
class MyClass {
Type variable;
public:
MyClass(Type a) {
cout << "inside MyClass constructor "<<endl;
variable = a;
}
};
void fun (Type){
return;
}
int main(){
Type t;
cout <<"t created"<<endl;
MyClass tmp = MyClass(t);
cout<<"calling fun"<<endl;
fun(t);
}
的這個輸出是:
type constructor
t created
type copy constructor called
type constructor
inside MyClass constructor
calling fun
type copy constructor called
我很奇怪,爲什麼默認的構造函數被調用時,我把它傳遞給MyClass
構造以及爲什麼拷貝構造函數被調用當我通過它fun()
?
順便說一句,當我使用初始化列表。
[迂迴]'變量'不是從'a'複製初始化,它是直接初始化的。 – Barry