細說C++(二十五):論C++ explicit關鍵字,與inplicit

explicit

  • 字面含義;
    明確的 明白的
  • C++用法 譯: 顯示的

1.表明用求編譯器不要自動得轉化,拋棄默認的操作;不要隱式更改到它
2. 僅僅用在類的構造函數中
3. 轉化是雙向的; 類 - - 其它類型

  • 主要包含三層含義:
    (1)該關鍵字只能用來修飾類內部的構造函數

    (2)禁止隱式調用拷貝構造函數

    (3)禁止類對象之間的隱式轉換

示例;摘自標準庫

template <class ,Alloc>
class vector<bool,Alloc>
{
public:
    typedef _bit_reference reference;
protected:
    reference operator[] (size_type n){
        return *(begin()+difference_type());
    }
};

struct _bit_reference{
    unsigned int* p;
    unsigned int mask;
   // ……
public:
    operator bool() const {return !(!(*p& mask));}
    //……
};

總結:
(1)explicit關鍵字只需用於類內的單參數構造函數前面。由於無參數的構造函數和多參數的構造函數總是顯示調用,這種情況在構造函數前加explicit無意義。

(2)如果想禁止類A對象被隱式轉換爲類B對象,可在類B中使用關鍵字explicit,即定義這樣的轉換構造函數

implicit

  • 隱式的
    C++編譯過程可能發生隱式類型轉換,但無implicit 關鍵字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章