C++当中的explicit关键字平时用的比较少,但是要想稍深入地学习C++,这个还是必须的。
首先,明确一点,explicit关键字只是用来修饰构造函数 的;而且它只会出现在类中的构造函数声明之前。
其次,explicit关键字是用来抑制由构造函数定义的隐式转换 的。那么我们首先需要知道什么是由构造函数定义的隐式转换 ?
下面的代码演示了这种转换:
当定义了MyClass类的MyClass(int num);构造函数后,C++就允许最后一行的那种构造方法,这就叫做由构造函数定义的隐式转换 。
而explicit关键字的作用,正是抑制这种隐式转换的发生。对以上代码进行如下修改:
当定义了explicit关键字后,隐式转换就会报错。这时只能使用显式转换 。
使用explicit关键字需要注意的问题 :
- explicit关键字只需要在类定义中的构造函数声明语句的头部书写,在构造函数的定义处不用写了。写了会报错。
关于explicit使用的建议 :
- 如果没有很合适的理由说明必须使用隐式转换,而且如果你的构造函数是单形参的,那么最好声明explicit,这样可以避免错误。当然,多形参的构造函数是没有构造函数的隐式转换的,所以也没必要声明explicit。
参考资源: