博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中的explicit关键字
阅读量:7180 次
发布时间:2019-06-29

本文共 1286 字,大约阅读时间需要 4 分钟。

先看一下MSDN上关于explicit关键字的解释

This keyword is a declaration specifier that can only be applied to in-class constructor declarations. An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object.

1 该关键字只能用来修饰类内部的构造函数

class A{public:    explicit A(int i):m_i(i){};private:    int m_i ;};

但是下面这样就不对了

class A{public:    A(int i);private:    int m_i ;};explicit A::A(int i){    m_i = i ;}

2 该关键字能防止隐式转换

在C++中允许这样的操作,某个类的构造函数只有一个参数,假设类型为T,那么可以进行T到该类的对象的隐式转换,比如下面的类A的构造函数只有一个参数,类型为int,那么就可以直接将一个int转换为A类的对象,这种情况可能发生在

  • 构造A类对象时
  • 以A的对象为参数的函数调用时
class A{public:    A(int i):m_i(i){};private:    int m_i ;};void Func(A a){    }int main(void){    A a1 = 1 ;    // OK, implicit convert 1 to object of A    Func(2) ;    // OK, implicit convert 2 to object of A    getchar() ;}

不幸的是,有时这种转换会造成混淆,所以我们要阻止这种转换,这就是explicit所做的事情了,用explicit声明的构造函数不允许做这种类型的转换。如果试图转换,则会遇到下面的编译错误。

class A{public:    explicit A(int i):m_i(i){};private:    int m_i ;};void Func(A a){    }int main(void){    A a1 = 1 ;    // error C2440: 'initializing' : cannot convert from 'int' to 'A'    Func(2) ;    // 'Func' : cannot convert parameter 1 from 'int' to 'A'    getchar() ;}

====

本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2010/08/05/1792749.html,如需转载请自行联系原作者

你可能感兴趣的文章
Axis2+spring的webservice小例子
查看>>
Android UI系列-----ScrollView和HorizontalScrollView
查看>>
Mac OS X 背后的故事
查看>>
AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引
查看>>
修改hosts文件无效?附解决办法
查看>>
OpenCV编程->Haar训练(1)
查看>>
Oracle_071_lesson_p10
查看>>
Oracle_052_lesson_p2
查看>>
脱壳免杀技术大纲
查看>>
Spring Cache
查看>>
Linux下Mysql常用命令
查看>>
进阶-中小型网络构建-二层VLAN技术详解配实验步骤
查看>>
LVM逻辑卷管理
查看>>
java crm 进销存 websocket即时聊天发图片文字 好友群组 SSM源码
查看>>
通俗讲解边缘计算,抓住信息革命的浪潮
查看>>
关于适配这件小事的前世今生
查看>>
用TMG搭建×××服务器(四)---基于PPTP的站点到站点×××
查看>>
datatables表头与数据无法对齐的解决方案
查看>>
Cisco 路由器 secondary address实现RIPV1不连续子网
查看>>
每天一个linux命令(14):head 命令
查看>>