2010-07-18 19 views

risposta

4

È utile per decorare i costruttori; un costruttore così decorato non può essere utilizzato dal compilatore per conversioni implicite.

C++ permette fino a una conversione fornito dall'utente, dove significa "forniti dall'utente", "per mezzo di un costruttore di classe", ad esempio, in:

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

il compilatore chiamerà cerchio ctor qui , constructinmg circle c con un valore di 3 per r.

explicit viene utilizzato quando non si desidera questo. L'aggiunta di mezzi espliciti che dovreste esplicitamente costrutto:

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

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

La parola chiave explicit impedisce conversioni implicite.

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

Senza la parola chiave explicit, le dichiarazioni (1) e (3) sarebbe la compilazione perché il compilatore può vedere che un const char* può essere implicitamente convertito in un CImg (tramite il costruttore accettare un const char*). A volte questa conversione implicita non è desiderabile perché non ha sempre senso.

Problemi correlati