explict关键字的含义
2015-12-19 21:09
369 查看
explicit构造函数的作用?
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色。 1 是个构造器 ,2
是个默认且隐含的类型转换操作符。假如我们定义一个含有一个参数的构造函数的类,当我们写下 AAA=XXX;这样的代码时,这时编译器会自动调用这个构造器,创建一个AAA的对象。
这样看起来很方便,但是却违背我们的本意,这时在构造函数前添加explicit关键字来指点该构造函数只能被明确调用,不可进行隐式转换。
代码:
class A { public: A(int a):m_a(a){ } ~A(){} private: int m_a; }; class B { public: explicit B(int a):m_a(a){ } ~B(){} private: int m_a; }; int main(int argc, char* argv[]) { A a=10;//隐式调用其构造函数。成功 B b=10;//编译错误,不能隐式转换 B b(10);//显示调用,成功。 return 0; }类型A含有带有一个参数的构造函数,代码 A a=10;(可以看做 A a(10);)可以隐式转换成调用该类型的构造函数。B的构造函数被声明为explicit(显式),表示不能通过隐式转换来调用该构造函数,因此会出现编译错误。
相关文章推荐
- Caffe学习——Imagenet分类
- POJ1088滑雪(dp+记忆化搜索)
- 字母序列递增,即A+1=B,B+2=D,ASCII
- 大神眼中的React Native--备用
- 不要沦陷程序员30岁问题
- HAProxy 安装与配置
- Shell脚本
- Java中九大内置对象
- android:activity知识点
- 近期code review几处小问题集锦
- python 开发工具搭建
- LeetCode 3Sum Closest
- System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
- 点击一个按钮触发文件选择
- AngularJS 表格
- 数独(九宫格)的高效算法
- wine下玩魔兽的设置
- 如何将办公文件转换成图片(一) -- 搭建Windows环境下OpenOffice+mupdf+vs2013的开发环境
- JsplitPane
- 安装mysql过程中卡在starting server解决办法