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 關鍵字