• Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚


    最近在复习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

  • 相关阅读:
    SVG与HTML、JavaScript的三种调用方式
    求时间段的交集
    iis 搭建ftp
    C#获取MAC地址的几种方法
    c#获取本地IP和MAC地址
    【Web】Javascript、Python、Django模板配合处理URL Encode
    【Django】依赖auth.user的数据库迁移,以及admin用户非交互式创建
    【Linux】debian jessie版本安装1.9 svn
    【日志处理】logstash性能优化配置
    【Linux】apt-get install 怎么阻止弹出框,使用脚本默认自动安装?
  • 原文地址:https://www.cnblogs.com/findumars/p/4886439.html
Copyright © 2020-2023  润新知