2010-07-18 5 views

Répondre

4

Il est utilisé pour décorer les constructeurs; un constructeur ainsi décoré ne peut pas être utilisé par le compilateur pour des conversions implicites.

C++ permet jusqu'à une conversion fournie par l'utilisateur, où « fourni par l'utilisateur » moyen «au moyen d'un constructeur de classe », par exemple dans:

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

le compilateur appellera ici le cercle cteur , constructinmg cercle c avec une valeur de 3 pour r.

explicit est utilisé lorsque vous ne le souhaitez pas. Ajout des moyens explicites que vous auriez à explicitement construction:

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

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

Le mot clé explicit empêche les conversions implicites.

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

Sans le mot-clé explicit, les déclarations (1) et (3) compilerait parce que le compilateur peut voir qu'un const char* peut être converti implicitement à un CImg (via le constructeur d'accepter un const char*). Parfois, cette conversion implicite est indésirable parce qu'elle n'a pas toujours de sens.

Questions connexes