天天看點

關鍵字explicit小議

内容:

    在C++語言中有這樣一個關鍵字explicit,也許你不經常用到它或者壓根就根本就沒有見過它,

那這個關鍵字到底有什麼作用呢?C++語言标準中為什麼要将它作為一個關鍵字标準列入标準當中

呢?帶着這些問題我們稍微地認識一下這個"家夥",呵呵.

    我們先來看一段code:

    class TestClass{

    public:

        TestClass(int value):value_(value){}

        ...

    private:

        int value_;       

    };

    接下來我們開始使用這個類:

    //test.cpp

    ...

    TestClass myClass(10);

    ...

    這樣寫,OK!,沒問題,不過如果我改成另外一種寫法:

    TestClass myClass = 10;//嗯??是不是覺的看起來有點不那麼舒服,呵呵!

    ...

    這樣寫的結果,其實還是沒問題,為什麼呢?原因在于編譯器在編譯這條語句的時候用進行了一個

預設的隐式轉換操作,它把這裡TestClass myClass = 10;轉換為TestClass myClass(10);哇!它怎麼

做出這樣的事情呢?我壓根就沒想讓它這麼做,真是不可原諒,那麼我們有沒有什麼辦法不讓編譯器進

行這中莫名其妙的轉換呢?當然有!這個時候我們的主角explicit就閃亮登場了,哒哒哒哒..

    explicit就是為阻止這種轉換而生的,它提供給了程式員對自己寫的代碼所産生預期結果的更多

控制,我們添加了關鍵字後,代碼變為:

    class TestClass{

    public:

        explicit TestClass(int value):value_(value){}

        ...

    private:

        int value_;       

    };

    再次編譯test.cpp:

    TestClass myClass = 10;// error :'initializing' : cannot convert from 'int' to 'TestClass'

    嘎嘎..,沒編譯過,這結果正是我們想要的,因為explicit的修飾使的編譯器不再為這段代碼産生

等價的轉換代碼.現在你知道explicit關鍵字的作用了吧?

    請記住:

    ◆explicit關鍵字阻止了編譯器對單參類構造函數的隐式轉換.

    ◆explicit隻對隻有一個參數的構造函數類起作用

繼續閱讀