如果构造函数只接受一个实参,那么它实际上定义了转换为此类型的隐式转换机制。称为转换构造函数
class test{
public:
string str;
test(std::string s): str(s){}
int combine(test t) {
if( t.str > str ) return -1;
else return 1;
}
};<pre name="code" class="cpp">int main() {
test iter("123");
string s="11111";
cout << iter.combine(s) << endl;
return 0;
}
使用iter.conbine(s)是合法的,s自动转换为test类型。
1、只允许一步类类型转换,例如item.combine("11111"),是不合法的。
2、可以使用explicit声明构造函数,抑制隐式转换。explicit只能在类内使用,explicit构造函数只能用于直接初始化,不能用于赋值初始化。