您的位置:首页 > 编程语言 > C语言/C++

C++的explicit关键字 学习笔记

2011-05-18 15:58 211 查看
C++当中的explicit关键字平时用的比较少,但是要想稍深入地学习C++,这个还是必须的。





首先,明确一点,explicit关键字只是用来修饰构造函数
的;而且它只会出现在类中的构造函数声明之前。

其次,explicit关键字是用来抑制由构造函数定义的隐式转换
的。那么我们首先需要知道什么是由构造函数定义的隐式转换


下面的代码演示了这种转换:



class MyClass
{
public:
  MyClass( int num );
}
//...
MyClass obj = 10; //ok,convert int to MyClass



当定义了MyClass类的MyClass(int num);构造函数后,C++就允许最后一行的那种构造方法,这就叫做由构造函数定义的隐式转换






而explicit关键字的作用,正是抑制这种隐式转换的发生。对以上代码进行如下修改:

class MyClass
{
public:
  explicit MyClass( int num );  //add a explicit in front of constructor
}
//...
MyClass obj = 10; //compiler error, implicit convert is not allowed now.
MyClass obj = MyClass(10); //OK, because this is a explicit convert.



当定义了explicit关键字后,隐式转换就会报错。这时只能使用显式转换






使用explicit关键字需要注意的问题


explicit关键字只需要在类定义中的构造函数声明语句的头部书写,在构造函数的定义处不用写了。写了会报错。

关于explicit使用的建议


如果没有很合适的理由说明必须使用隐式转换,而且如果你的构造函数是单形参的,那么最好声明explicit,这样可以避免错误。当然,多形参的构造函数是没有构造函数的隐式转换的,所以也没必要声明explicit。



参考资源:

《C++ Primer》

http://www.cnblogs.com/chio/archive/2007/09/17/895263.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: