Используется для украшения конструкторов; созданный таким образом конструктор не может использоваться компилятором для неявных преобразований.
C++ позволяет до одного предоставленного пользователем преобразования, где «Предоставленный пользователем» означает «с помощью конструктора класса», например, в:
class circle {
circle(const int r) ;
}
circle c = 3 ; // implicit conversion using ctor
компилятор будет вызывать круг CTOR здесь , constinmg circle c
со значением 3 для r
.
explicit
используется, когда вы этого не хотите. Добавление явных означает, что вы должны явно конструкции:
class circle {
explicit circle(const int r) ;
}
// circle c = 3 ; implicit conversion not available now
circle c(3); // explicit and allowed
Возможный дубликат: http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean –