最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数。以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做什么用的呢?

关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.

光看这一句似乎不太容易明白,下面,举个简单地例子。

//main.cpp
            #include <iostream>

using namespace std;

class Test
            {
            public:
                 Test(int a)
                 {
                      m_data = a;
                 }

void show()
                 {
                      cout << "m_data = " << m_data << endl;
                 }

private:
                 int m_data;
            };

void main(void)
            {
                 Test t = 2;   // 将一个常量赋给了一个对象
                  t.show();
            }

编译能够通过,执行结果:m_data = 2。

为什么会这样呢?原来C++通过隐式转换,构造了一个临时对象Test(2),将它赋给了t(这里调用了默认的构造函数,而不是重载的“=”,因为这是在对象创建的时候)。那么,如果给构造函数加上关键字 explicit ,构造函数变成了 explicit Test(int a),再次编译,编译器就会报错。这时,就只能显式地使用构造函数了Test t = Test(2) 。

http://blog.csdn.net/libaineu2004/article/details/19491579

最新文章

  1. Minor【 PHP框架】1.简介
  2. 【中文分词】隐马尔可夫模型HMM
  3. [bzoj4722]由乃
  4. SharePoint 2013 工作流之使用Visio设计篇
  5. redis原理分析
  6. SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.2
  7. Cannot open connection 解决办法
  8. 使用Html5+C#+微信 开发移动端游戏详细教程 :(五)游戏图像的加载与操作
  9. JS正则表达式基础
  10. [非技术参考]C#枚举类型
  11. vs远程调试
  12. Jacobi symbol(裸雅可比符号)
  13. Java禁止浏览器有缓存的源码
  14. VirboxLM许可管理平台,一站式软件保护解决方案
  15. PHP 常用函数集合
  16. selenium自动化定位方式
  17. C#:TextBox数据绑定
  18. 谁考了第k名
  19. Spark2.3 HA集群的分布式安装
  20. python面向对象之 类的关系

热门文章

  1. Eclipse设置合适的字体
  2. 2015第29周二AOP
  3. HDOJ 1420 Prepared for New Acmer(DP)
  4. 我学hash_map(2)
  5. Havel定理
  6. MD中bitmap源代码分析--SYNC IO和RAID5的补充
  7. mysql中的unique
  8. Mongodb 条件查询
  9. Sqlserver更新数据表xml类型字段内容某个节点值的脚本
  10. OC与JS互相调用