引用一下Bjarne Stroustrup的例子:
1classString{
2explicitString(intn);
3String(constchar*p);
4};
5Strings1='a';//错误:不能做隐式char->String转换
6Strings2(10);//可以:调用explicitString(intn);
7Strings3=String(10);//可以:调用explicitString(intn);再调用默认的复制构造函数
8Strings4="Brian";//可以:隐式转换调用String(constchar*p);再调用默认的复制构造函数
9Strings5("Fawlty");//可以:正常调用String(constchar*p);
10voidf(String);
11Stringg()
12{
13f(10);//错误:不能做隐式int->String转换
14f("Arthur");//可以:隐式转换,等价于f(String("Arthur"));
15return10;//同上
16}
  发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。
  原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。
  要注意的是,不仅仅是只有一个参数的构造函数可以用explicit,如果一个构造函数带默认实参,并且非默认实参是只有一个,那么应该也给他分配为explicit。