C++ изобилует темными местами, которые в целом не вызывают сложностей в понимании, однако малоизвестны из-за своей редкой употребимости. Например ключевое слово explicit, мало кому известно, на практике лично я им пользовался ровно 0 раз, тем не менее полезно хотя бы иметь в виду что оно делает.
Ключевое слово explicit запрещает автоматическое создание конвертирующего конструктора. Вот так работает конвертирующий консруктор, создаваемый компилятором автоматически:
class FruitBasket {
public: FruitBasket(int);
}
// ...
FruitBasket fb = 5; // Прокатит! Автоматическое преобразование int в объект
FruitBasket
А вот так можно запретить создание автоматичекого конвертирующего конструктора:
class FruitBasket {
public: explicit FruitBasket(int);
}
// ...
FruitBasket fb = 5; // Не прокатит!
FruitBasket fb = FruitBasket(5); // Прокатит! Сработает копирующий конструктор, который тоже создается автоматически
Оригинал данного сообщения находится здесь