如果我用一個整數作爲參數(而不是'通用'對象)調用「func(const generic & ref)」,構造函數generic(int _a)將調用來創建一個新的對象。傳遞給const引用的C++文本導致自動構建
class generic {
public:
int a;
generic() {}
generic(int _a) : a(_a) {
std::cout << "int constructor was called!";
}
generic(const generic& in) : a(in.a) {
std::cout << "copy constructor was called!";
}
};
void func(const generic& ref) {
std::cout << ref.a;
}
int main() {
generic g(2);
func(g); // this is good.
func(generic(4)); // this is good.
func(8); // this is good...... ?
return 0;
}
最後一個「func(8)」調用使用構造函數generic(int _a)創建一個新對象。這種建築有沒有名字?程序員不應該在傳遞參數之前顯式構造一個對象嗎?像這樣:
func(generic(8));
單獨傳遞整數(除了保存時間)有什麼好處嗎?
http://en.cppreference.com/w/cpp/language/implicit_cast – szczurcio
你有一個構造函數,它需要一個'int',因此編譯器會使用它來創建'generic'。如果您不想使用該構造函數,請使用'explicit'關鍵字。 –