Qt中的关键字----explicit

 转自http://blog.csdn.net/libaineu2004/article/details/19491579ios

 

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

    关键字 explicit 能够禁止“单参数构造函数”被用于自动类型转换。光看这一句彷佛不太容易明白,下面,举个简单地例子。ui

          //main.cpp
            #include <iostream>spa

            using namespace std;.net

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

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

            private:
                 int m_data;
            };ci

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

      编译可以经过,执行结果:m_data = 2。it

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

 

     看过这段,仍是不太理解explicit,因而又找到这样一篇文章http://blog.csdn.net/guodongxiaren/article/details/24455653?utm_source=tuicool&utm_medium=referral    CSDN上的一个牛人所写,看过之后,会理解的更透彻。