鱼C论坛

 找回密码
 立即注册
查看: 5389|回复: 3

explicit关键字是做什么用的

[复制链接]
发表于 2013-8-16 23:17:07 | 显示全部楼层 |阅读模式
1鱼币
看了很多C++的源代码,发现有explicit这个关键字,而且好像只出现在构造函数,我自己打代码,发现并没有区别,那这个explicit有啥用呢??

最佳答案

查看完整内容

explicit 关键字的主要作用是用来避免自定义类型隐式转化为类类型的 举个例子: 在上面定义的这个类里有一个构造函数,它的参数是int型, MyClass obj = 10; 这句是为了给类定义 一个实例,但是 obj是MyClass类型, 10是int型, 为啥10可以直接等于obj?(类型不同) , 原因就出在这个类的 构造函数上了,构造函数通过隐式的传值,将10传给num,然后执行构造函数,其实这语句等价于:: MyClass obj = MyClass(10)。。。这就 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 23:17:08 | 显示全部楼层
explicit 关键字的主要作用是用来避免自定义类型隐式转化为类类型的
举个例子:
  1. class MyClass  
  2. {  
  3. public:  
  4. MyClass( int num );  
  5. }  
  6. //.  
  7. MyClass obj = 10; //ok,convert int to MyClass
复制代码
在上面定义的这个类里有一个构造函数,它的参数是int型, MyClass obj = 10; 这句是为了给类定义
一个实例,但是 obj是MyClass类型, 10是int型, 为啥10可以直接等于obj?(类型不同) , 原因就出在这个类的
构造函数上了,构造函数通过隐式的传值,将10传给num,然后执行构造函数,其实这语句等价于::
MyClass obj = MyClass(10)。。。这就是隐式转换
       清楚隐式转换后就不难理解explicit的作用了,它的作用就是避免发生这种事情啦。。在构造函数上添加该
关键字,即将构造函数声明为显示的时候,就防止这种自动转换了
       还是上面的例子,如果在构造函数前面加上explicit时,到了MyClass obj = 10 就不能执行了,编译通不过
  1. class MyClass  
  2. {  
  3. public:  
  4. explicit MyClass( int num );  
  5. }  
  6. //.  
  7. MyClass obj = 10; //err,can't non-explict convert
复制代码


评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
编程难 + 1 + 1 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 23:23:11 | 显示全部楼层
http://developer.51cto.com/art/201002/183398.htm
不知道对你是否有帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-16 23:34:29 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-8-16 23:23 http://developer.51cto.com/art/201002/183398.htm
不知道对你是否有帮助

啥意思??看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-5 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表