类的构造函数被explicit修饰可以阻止类的对象进行隐式转换,但仍然可以显示转换.
class B
{
public:
explicit B(int a = 10,bool c = true)
{
}
};
void dosomething(B b)
{
}
int main(int *argc , char **argv)
{
B object1;
dosomething(object1);
B object2(20);
dosomething(20);//如果有explicit这句就报错,因为不能隐式转换(用20去生成一个B对象a=20).
dosomething(B(20));//这个是显式转换,无论有不有explicit
return 0;
}