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

本文详细介绍了在Android 2.3.5系统中,explicit关键字在C++中的作用,通过分析string8类的构造函数,解释了explicit如何防止类构造函数的隐式转换。示例展示了如何使用explicit关键字来阻止编译器自动将数据类型转换为类对象,从而帮助理解其在防止类型转换错误中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

***************************************************************************************************************************
作者: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,这样就可以防止这种自动的转换操作。


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值