zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    《Web 开发基础》专题系列
    《.NET 编程结构》专题汇总(C#)
    .NET Core:使用BarTender
    .NET Core:过滤器
    .NET Core:中间件
    .NET Core:Api版本控制
    .NET Core:Token认证
    .NET Core:SignalR
    .NET Core:跨域
    .NET Core:Json和XML
  • 原文地址:https://www.cnblogs.com/findumars/p/4886439.html
Copyright © 2011-2022 走看看