开发者

What is the explicit keyword for in c++? [duplicate]

This question already has answers here: Closed 12 years ago.

Possible Duplicate:

What does the explicit keyword in C++ mean?

explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data开发者_运维技巧(0) {
  assign(filename);
}

what's the difference with or without it?


It's use to decorate constructors; a constructor so decorated cannot be used by the compiler for implicit conversions.

C++ allows up to one user-provided conversion, where "user-provided" means, "by means of a class constructor", e.g., in :

 class circle {
   circle( const int r ) ;
 }

  circle c = 3 ; // implicit conversion using ctor

the compiler will call the circle ctor here, constructinmg circle c with a value of 3 for r.

explicit is used when you don't want this. Adding explicit means that you'd have to explicitly construct:

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

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


The explicit keyword prevents implicit conversions.

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

Without the explicit keyword, statements (1) and (3) would compile because the compiler can see that a const char* can be implicitly converted to a CImg (via the constructor accepting a const char*). Sometimes this implicit conversion is undesirable because it doesn't always make sense.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜