explicit关键字
来源:互联网 发布:c语言比较4个数大小 编辑:程序博客网 时间:2024/04/28 14:48
C++提供关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换发生.
声明为explicit的构造函数不能在隐式转换中使用.
C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色.
1.是个构造器,2.是个默认且隐含的类型转换操作符.
写下如AAA = XXX,这样的代码,且恰好XXX的类型正好是AAA单参数构造的参数类型,这时候编译器就自动调用这个构造器,创建一个AAA的对象.
使用explicit声明构造函数,则可防止隐式转换,避免上述情况的发生.具体例子如下:
- class CTest1 {
- public:
- CTest1(int n)
- {
- cout<<"Constructor of CTest1"<<endl;
- }
- CTest1(const CTest1&)
- {
- cout<<"Copy constructor of CTest1"<<endl;
- }
- };
- class CTest2 {
- public:
- explicit CTest2(int n)
- {
- cout<<"Constructor of CTest2"<<endl;
- }
- explicit CTest2(const CTest2&)
- {
- cout<<"Copy constructor of CTest2"<<endl;
- }
- };
- int main()
- {
- CTest1 a1(1); //显示调用构造函数
- CTest1 b1 = 1; //隐式调用构造函数
- CTest1 c1 = a1; //隐式调用拷贝构造函数
- CTest1 d1(b1); //显示调用拷贝构造函数
- CTest2 a2(2); //显示调用构造函数
- CTest2 b2 = 2; //隐式调用构造函数,编译错误
- CTest2 c2 = a2; //隐式调用拷贝构造函数,编译错误
- CTest2 d2(b2); //显示调用拷贝构造函数
- return 0;
- }
如第26行代码所示,是直接隐式调用构造函数,创建对象b1,不要误理解为是先隐式调用构造函数创建临时对象,将调用拷贝构造函数,以临时对象创建对象b1.
如第31行代码所示,explicit对拷贝构造函数也会限制作用,将会阻隐式拷贝构造函数的调用.
将拷贝构造函数声明为explicit,则会阻止隐式拷贝构造函数的调用.隐式拷贝构造函数的调用主要发生在三个点:
1.一个对象作为函数参数,以值传递的方式传入函数体.
2.一个对象作为函数返回值,以值传递的方式从函数返回.
3.以AAA = xxx的方式创建对象AAA,xxx为与AAA为同类型的对象.
因而,将拷贝构造函数声明成explicit并不是良好的设计,一般只将有单个参数的constructor声明为explicit,而copy constructor不要声明为explicit.
转载:http://www.cnblogs.com/dwdxdy/archive/2012/07/17/2595479.html
0
上一篇:SQLite 数据库的安装与使用
下一篇:从Qt 4到Qt 5.2安装、程序迁移和发布
相关热门文章
- const用法详解,如何修饰变量...
- 怎样增强百度权重外链是王道...
- php访问权限修饰及类访问权限...
- c语言中的static和extern关键...
- python:利用asyncio进行快速抓...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- 我的ChinaUnix博客被锁定了,...
- 虚拟机中ubuntu无线连接问题...
- IBM DS3400 盘阵怎么查看是单...
- 启动auditd时,报错如下,怎么...
- CGSL系统中root密码正确,但无...
给主人留下些什么吧!~~
评论热议
0 0
- explicit 关键字
- Explicit 关键字
- Explicit 关键字
- explicit关键字
- 关键字explicit
- explicit关键字
- explicit关键字
- explicit关键字
- 关键字explicit
- explicit关键字
- Explicit 关键字
- 关键字 explicit
- explicit关键字
- 关键字 explicit
- explicit关键字
- explicit 关键字
- explicit 关键字
- explicit关键字
- CSS选择器
- Linux脚本(shell)编程(四) 判断条件
- SHELL编程之&& ||
- Qt Creator编写LED控制界面
- SQLite 数据库的安装与使用
- explicit关键字
- 从Qt 4到Qt 5.2安装、程序迁移和发布
- 将博客搬至CSDN
- uboot在mini2440上的移植
- 根文件系统的制作
- 常见内核引导失败的解决办法
- Ubuntu 12.10下源码安装MJPG-Streamer及使用
- ubuntu下nfs安装配置
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
姆大陆
大陆对
大陆人
欧美大陆
小明大陆免费播放平台第1页
2015小明大陆免费播放
神魔大陆论坛
神魔大陆图片
西普大陆手机版
大陆期货软件下载
大隋圣天子
玄幻九州之大隋天帝
从大隋太子到大唐皇帝
神话大隋
大隋崛起若焰
隋末之大乱世召唤
大隋之绝世皇帝
大隋之少年大将军
玄幻九州之大隋天帝九尾精灵
从大隋太子到大唐天子
大隋之少年天子
重返大隋
大隋皇帝1一368分卷阅读
大隋昏君
大隋之神级推演
大隋帝国
大隋风云
崛起隋末
大隋王朝
大隐
大隐 疯神狂想
大雁
大雁南飞
大雁简笔画
大雁图片
大雁塔门票
大雁飞
远飞的大雁
大雁塔广场
大雁叫声
大雁塔旅游