码迷,mamicode.com
首页 > 其他好文 > 详细

explicit关键字

时间:2016-07-15 13:45:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

C++中,explicit关键字用来修饰类只有一个参数的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。

explicit使用注意事项:

      explicit 关键字只能用于类内部的构造函数声明上。

      explicit 关键字作用于单个参数的构造函数。

      explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换。

Bjarne Stroustrup的例子:
class String{
      explicit String(int n);
      String(const char *p);
};
String s1 = ‘a‘; //错误:不能做隐式char->String转换
String s2(10);   //可以:调用explicit String(int n);
String s3 = String(10);//可以:调用explicit String(int n);再调用默认的复制构造函数
String s4 = "Brian"; //可以:隐式转换调用String(const char *p);再调用默认的复制构造函数
String s5("Fawlty"); //可以:正常调用String(const char *p);
void f(String);
 
String g()
{
    f(10); //错误:不能做隐式int->String转换
    f("Arthur"); //可以:隐式转换,等价于f(String("Arthur"));
    return 10; //同上
}
在实际代码中的东西可不像这种故意造出的例子。
发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。
原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。

explicit关键字

标签:

原文地址:http://www.cnblogs.com/wjw-blog/p/5673136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!