[置顶] 基于android2.3.5系统:explicit关键字应用方法详解

***************************************************************************************************************************
作者:EasyWave                                                                                 时间:2013.02.24

类别:Android系统源码分析                                                              声明:转载,请保留链接

注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

在Android2.3.5中,我经常看到explicit这个关键字,开始对explicit关键字,不是很熟悉,对于C++我也是刚刚熟悉没有多久,所以还有很多的知识点,需要去了解。所以从网络上,搜索关于explicit关键字的用法,现在以Android的string8为例,来解释explicit关键字的作用。在C++中, explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:

[置顶] 基于android2.3.5系统:explicit关键字应用方法详解_第1张图片

那么如何使用和定义呢?还是以下面的例子来说明吧:

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的代码如下:

[置顶] 基于android2.3.5系统:explicit关键字应用方法详解_第2张图片

总结:

C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。如果要避免这种自动转换的功能,我们需要关键字explicit将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit,这样就可以防止这种自动的转换操作。


 

 

你可能感兴趣的:([置顶] 基于android2.3.5系统:explicit关键字应用方法详解)