C++的explicit关键字 学习笔记
2011-05-18 15:58
211 查看
C++当中的explicit关键字平时用的比较少,但是要想稍深入地学习C++,这个还是必须的。
首先,明确一点,explicit关键字只是用来修饰构造函数
的;而且它只会出现在类中的构造函数声明之前。
其次,explicit关键字是用来抑制由构造函数定义的隐式转换
的。那么我们首先需要知道什么是由构造函数定义的隐式转换
?
下面的代码演示了这种转换:
当定义了MyClass类的MyClass(int num);构造函数后,C++就允许最后一行的那种构造方法,这就叫做由构造函数定义的隐式转换
。
而explicit关键字的作用,正是抑制这种隐式转换的发生。对以上代码进行如下修改:
当定义了explicit关键字后,隐式转换就会报错。这时只能使用显式转换
。
使用explicit关键字需要注意的问题
:
explicit关键字只需要在类定义中的构造函数声明语句的头部书写,在构造函数的定义处不用写了。写了会报错。
关于explicit使用的建议
:
如果没有很合适的理由说明必须使用隐式转换,而且如果你的构造函数是单形参的,那么最好声明explicit,这样可以避免错误。当然,多形参的构造函数是没有构造函数的隐式转换的,所以也没必要声明explicit。
参考资源:
《C++ Primer》
http://www.cnblogs.com/chio/archive/2007/09/17/895263.html
首先,明确一点,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
相关文章推荐
- C++学习笔记--explicit关键字
- C++的explicit关键字 学习笔记
- C++学习日记15——explicit关键字用法
- static关键字用法学习笔记(C++)
- C#学习笔记-explicit关键字
- C++基础学习笔记----第一课(关键字的变化)
- C++入门学习——explicit关键字的作用
- 【effective C++笔记】C++ 中explicit 关键字
- 【C++学习笔记】const关键字
- Effective C++ 学习笔记 01 const关键字
- c++学习笔记(4.c++中新的关键字)
- c++学习笔记(4.c++中新的关键字)
- C++学习笔记---const 关键字
- C++学习笔记9 C++新的关键字
- C++学习笔记7,const关键字的使用(一)。
- static关键字用法学习笔记(C++)
- C++学习笔记 C和C++中的const关键字
- C++学习笔记之关键字
- C++学习笔记:3.3.6 派生类中的static关键字
- C++学习笔记二(extern关键字详解)