***************************************************************************************************************************
作者:EasyWave 时间:2013.02.24
类别:Android系统源码分析 声明:转载,请保留链接
注意:如有错误,欢迎指正。这些是我学习的日志文章......
***************************************************************************************************************************
在Android2.3.5中,我经常看到explicit这个关键字,开始对explicit关键字,不是很熟悉,对于C++我也是刚刚熟悉没有多久,所以还有很多的知识点,需要去了解。所以从网络上,搜索关于explicit关键字的用法,现在以Android的string8为例,来解释explicit关键字的作用。在C++中, explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:
那么如何使用和定义呢?还是以下面的例子来说明吧:
class intClass { public: intClass( int num ); } //. intClass obj = 10; //ok,convert int to intClass
在上面的代码中编译器自动将整型转换为intClass类对象,实际上等同于下面的操作:
intClass temp(10); intClass obj = temp;
上面的C++ explicit关键字相关的操作即是所谓的"隐式转换"。如果要避免这种自动转换的功能,该怎么做呢?这就是关键字explicit的作用,将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit即可,这样就可以防止这种自动的转换操作,如果我们修改上面的intClass类的构造函数为显式的。
那么上面的intClass obj = 10; 在Android中的实例为bluetooth的代码如下:
总结:
C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。如果要避免这种自动转换的功能,我们需要关键字explicit将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit,这样就可以防止这种自动的转换操作。