2010-07-18 7 views

Antwort

4

Es wird verwendet, um Konstruktoren zu dekorieren; Ein so dekorierter Konstruktor kann vom Compiler nicht für implizite Konvertierungen verwendet werden.

C++ ermöglicht es einen Benutzer bereitgestellte Umwandlung, wo „vom Benutzer bereitgestellte“ bedeutet „mit Hilfe eines Klassenkonstruktors“, zum Beispiel in:

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

die Compiler hier den Kreis Ctor nennen , konstruieren Kreis c mit einem Wert von 3 für r.

explicit wird verwendet, wenn Sie dies nicht möchten. Hinzufügen von expliziten Mittel, die Sie explizit Konstrukt haben würde:

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

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

Das Schlüsselwort explicit verhindert implizite Konvertierungen.

// 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) 

Ohne explicit Schlüsselwort, Aussagen (1) und (3) würde kompilieren, da der Compiler kann sehen, dass ein const char* kann implizit in ein CImg umgewandelt wird (über den Konstruktor ein const char* akzeptieren). Manchmal ist diese implizite Konvertierung unerwünscht, weil sie nicht immer sinnvoll ist.

Verwandte Themen