C++中的explicit可以阻止在构造函数时发生的隐式转换
class A
{
public :
A(int num) : n(num) {}
private:
int n;
};
class B
{
public :
explicit B(int num) : n(num) {}
private:
int n;
};
int main()
{
A t1 = 233; //正确,构造函数处发生了隐式转换
B t2(233); //正确,构造函数没有发生隐式转换
B t3 = 233; //错误,构造函数处发生了不被允许的隐式转换
return 0;
}
注意!以上t1处发生的隐式转换只有当构造函数只有一个参数时才能发生!