C++中的Explicit关键字
作者:PhiliAI 发布时间:[ 2016/8/18 10:50:16 ] 推荐标签:关键字 C++
引用一下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。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com