explicit概念及基本使用方法
来源:互联网 发布:电脑报淘宝旗舰店 编辑:程序博客网 时间:2024/05/16 11:27
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。
这句话在代码中类似于
class T2 = 12; (不允许) class T2(12);(允许)
C++中的explicit
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。
所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。
这样看起来好象很酷, 很方便。 但在某些情况下(见下面权威的例子), 却违背了我们(程序员)的本意。 这时候就要在这个构造器前面加上explicit修饰, 指定这个构造器只能被明确的调用,使用, 不能作为类型转换操作符被隐含的使用。 呵呵, 看来还是光明正大些比较好。
explicit构造函数的作用
解析:
class Test1{public: Test1(int n) { num = n; } //普通构造函数private: int num;};class Test2{public: explicit Test2(int n) { num = n; } //explicit(显式)构造函数private: int num;};int main(){ Test1 t1 = 12; //隐式调用其构造函数, 成功 Test2 t2 = 12; //编译错误,不能隐式调用其构造函数 Test2 t3(12); //显式调用成功 return 0;}
Test1的构造函数带一个int型的参数,代码17行会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此代码18行会出现编译错误。
普通构造函数能够被隐式调用。而explicit构造函数只能被显示调用。
0 0
- explicit概念及基本使用方法
- 基本操作及概念
- 多线程的概念及使用方法
- git使用方法---概念及配置
- gdb基本使用方法及常用命令
- SetupDll基本使用方法及细节
- SSH原理及基本使用方法
- lombok 介绍及基本使用方法
- lombok 介绍及基本使用方法
- CocoaPods 安装及基本使用方法
- lombok 介绍及基本使用方法
- lombok 介绍及基本使用方法
- gdb基本使用方法及常用命令
- lombok 介绍及基本使用方法
- lombok介绍及基本使用方法
- lombok 介绍及基本使用方法
- sizeof的概念,使用方法及主要用途
- 循环的使用方法及概念-----黑马程序员
- 面试题(如何描述JAVA反射机制,如何描述hibernate 计算1000以内所有不能被7整除的整数之和,并输出)
- strdup() - 复制字符串
- 人生路途中给自己以后的生命里最好的礼物
- 郑晓龙新剧携手吴秀波、孙俪 被曝8月将开拍
- Tasks and Back Stack(未完成)
- explicit概念及基本使用方法
- 如果快速记住VIM的快捷键?VIM键盘图帮你搞定。
- Visual.Studio.2010 恢复初始化
- 判断闰年及给定日期求星期几
- 数学问题
- linux烧写启动盘-TF卡
- 【java学习笔记】 类成员和方法调用 子类父类调用
- Qt开发应用程序Debug与Release设置
- 出现java.lang.IllegalArgumentException: Can't convert argument: null