C++的explicit关键字 学习笔记
2012-03-14 13:22
253 查看
C++当中的explicit关键字平时用的比较少,但是要想稍深入地学习C++,这个还是必须的。
首先,明确一点,explicit关键字只是用来修饰构造函数的;而且它只会出现在类中的构造函数声明之前。
其次,explicit关键字是用来抑制由构造函数定义的隐式转换的。那么我们首先需要知道什么是由构造函数定义的隐式转换?
下面的代码演示了这种转换:
[cpp]
view plaincopy
class MyClass
{
public:
MyClass( int num );
}
//...
MyClass obj = 10; //ok,convert int to MyClass
当定义了MyClass类的MyClass(int num);构造函数后,C++就允许最后一行的那种构造方法,这就叫做由构造函数定义的隐式转换。
而explicit关键字的作用,正是抑制这种隐式转换的发生。对以上代码进行如下修改:
[cpp]
view plaincopy
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。
首先,明确一点,explicit关键字只是用来修饰构造函数的;而且它只会出现在类中的构造函数声明之前。
其次,explicit关键字是用来抑制由构造函数定义的隐式转换的。那么我们首先需要知道什么是由构造函数定义的隐式转换?
下面的代码演示了这种转换:
[cpp]
view plaincopy
class MyClass
{
public:
MyClass( int num );
}
//...
MyClass obj = 10; //ok,convert int to MyClass
当定义了MyClass类的MyClass(int num);构造函数后,C++就允许最后一行的那种构造方法,这就叫做由构造函数定义的隐式转换。
而explicit关键字的作用,正是抑制这种隐式转换的发生。对以上代码进行如下修改:
[cpp]
view plaincopy
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++学习笔记--explicit关键字
- C++的explicit关键字 学习笔记
- 我的小小学习笔记(4)----C++的关键字
- C++学习之路(23)---C++ explicit关键字详解
- c++学习笔记(4.c++中新的关键字)
- C++学习笔记六——内存模型和名称空间、关键字
- C++入门学习——explicit关键字的作用
- C++学习笔记,显示类型强制转换,关键字static_cast
- 【菜鸟C++学习笔记】27.通过operator关键字进行类型转换
- C++学习笔记---const 关键字
- C++学习日记15——explicit关键字用法
- C++学习笔记9 C++新的关键字
- C++学习笔记7,const关键字的使用(一)。
- c++学习笔记(4.c++中新的关键字)
- C#学习笔记-explicit关键字
- C++基础学习笔记----第一课(关键字的变化)
- 【effective C++笔记】C++ 中explicit 关键字
- C++ 学习笔记2----sizeof关键字
- Effective C++ 学习笔记 01 const关键字
- static关键字用法学习笔记(C++)