2010-07-18 24 views

Respuesta

4

Se usa para decorar constructores; un constructor así decorado no puede ser utilizado por el compilador para conversiones implícitas.

C++ permite que hasta una conversión proporcionado por el usuario, donde los medios "proporcionados por el usuario", "por medio de un constructor de la clase", por ejemplo, en:

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

el compilador llamará al ctor círculo aquí , construyendo el círculo c con un valor de 3 para r.

explicit se utiliza cuando no desea esto. La adición de medios explícitos que se tendrías que explícitamente construcción:

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

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

La palabra clave explicit evita las conversiones implícitas.

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

Sin la palabra clave explicit, declaraciones (1) y (3) se compilará porque el compilador puede ver que un const char* se puede convertir implícitamente a un CImg (a través del constructor de aceptar un const char*). A veces, esta conversión implícita es indeseable porque no siempre tiene sentido.

Cuestiones relacionadas