2011-07-21 34 views
22

可能重複:
What does the explicit keyword in C++ mean?C++的功能明確的關鍵字不帶參數

有沒有理由使用explicit關鍵字進行不帶任何參數的函數?它有什麼作用?我不知道,因爲我剛剛跨線

explicit char_separator()

附近的頁文檔化助推年底:: char_separator (http://www.boost.org/doc/libs/1_47_0/libs/tokenizer/char_separator.htm)來了,但它沒有解釋任何進一步的存在。

+6

不是一個笨蛋;這個問題是關於'explicit'關鍵字的一個非常特殊的情況。 –

+4

這不是一個函數,這是一個構造函數 - 請參閱http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean/121163#121163 – Skizz

+0

@larsmans很難說,沒有看到一些真實的例子 –

回答

14

閱讀explanation of members

explicit char_separator(const Char* dropped_delims, 
         const Char* kept_delims = "", 
         empty_token_policy empty_tokens = drop_empty_tokens) 
explicit char_separator() 

explicit關鍵字的第一個構造函數需要明確的創作char_separator類型的對象。 What does the explicit keyword mean in C++?很好地涵蓋了顯式關鍵字。

第二個構造函數的explicit關鍵字是一個噪音,並且被忽略。

EDIT

從C++標準:

7.1.2 P6告訴:

的顯式說明符,應僅在一個類聲明中 構造聲明中使用;見12.3.1。

12.3.1 P2講述:

一個明確的構造函數構造對象一樣,不明確的 構造函數,但這樣只有在直接初始化語法 (8.5)或在鑄件(5.2一樣。 9,5.4)被明確使用。默認的構造函數可能是一個顯式的構造函數;這樣的構造函數將是 用於執行默認初始化或值初始化(8.5)。 [實施例:

class Z { 
public: 
explicit Z(); 
explicit Z(int); 
// ... 
}; 
Z a;    // OK: default-initialization performed 
Z a1 = 1;   // error: no implicit conversion 
Z a3 = Z(1);  // OK: direct initialization syntax used 
Z a2(1);   // OK: direct initialization syntax used 
Z* p = new Z(1); // OK: direct initialization syntax used 
Z a4 = (Z)1;  // OK: explicit cast used 
Z a5 = static_cast<Z>(1); // OK: explicit cast used 

末端示例]

所以,用explicit關鍵字默認構造是一樣的沒有這個關鍵字。