Ключевое слово explicit используется для создания «неконвертирующих конструкторов» (nonconverting constractors). Например, рассмотрим следующий класс:
class MyClass {
int i;
public:
MyClass(int j) {i = j;}
// ...
};
Объекты этого класса могут быть объявлены следующим образом:
MyClass ob1(1);
MyClass ob2 = 10;
В данном случае инструкция
MyClass ob2 = 10;
автоматически конвертируется в следующую форму:
MyClass ob2(10);
Однако, если объявить конструктор MyClass с ключевым словом explicit, это автоматическое конвертирование не будет выполняться. Ниже объявление класса MyClass показано с использованием ключевого слова explicit при объявлении конструктора:
class MyClass {
int i;
public:
explicit MyClass(int j) {i = j;}
// ...
};
Теперь допустимыми являются только конструкции следующего вида:
MyClass ob (110);