可能重複:
What does the explicit keyword in C++ mean?C++中的explicit關鍵字是什麼?
explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {
assign(filename);
}
什麼是有或沒有它有什麼區別?
可能重複:
What does the explicit keyword in C++ mean?C++中的explicit關鍵字是什麼?
explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {
assign(filename);
}
什麼是有或沒有它有什麼區別?
這是用來裝飾構造函數;一個如此修飾的構造函數不能被編譯器用於隱式轉換。
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
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*
)。有時候,這種隱式轉換是不可取的,因爲它並不總是合理的。
可能重複:http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean – 2010-07-18 13:16:34