2010-07-18 68 views

回答

4

這是用來裝飾構造函數;一個如此修飾的構造函數不能被編譯器用於隱式轉換。

C++允許一條用戶提供的轉換,這裏的「用戶提供的」的意思,「由一個類的構造的手段」,例如,在:

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

編譯器將在這裏所說的圈構造函數,對於r,構建圓圈c,值爲3。

explicit當你不想要這個時使用。並稱,你必須明確地結構明確方式:

class circle { 
    explicit circle(const int r) ; 
} 

    // circle c = 3 ; implicit conversion not available now 
    circle c(3); // explicit and allowed 
5

explicit關鍵字可防止隱式轉換。

// Does not compile - an implicit conversion from const char* to CImg 
CImg image = "C:/file.jpg"; // (1) 
// Does compile 
CImg image("C:/file.jpg"); // (2) 

void PrintImage(const CImg& img) { }; 

PrintImage("C:/file.jpg"); // Does not compile (3) 
PrintImage(CImg("C:/file.jpg")); // Does compile (4) 

沒有explicit關鍵字,語句(1)和(3)將編譯,因爲編譯器可以看到一個const char*可以隱式轉換到一個CImg(通過構造接受const char*)。有時候,這種隱式轉換是不可取的,因爲它並不總是合理的。

相關問題