Ключевое слово explicit запрещает автоматическое создание конвертирующего конструктора. Вот так работает конвертирующий конструктор, создаваемый компилятором автоматически:
1 2 3 4 5 6 7 | class logger { public: logger(const LPCTSTR pathToLog); } // ... logger log = "log.txt"; // будет работать // Автоматическое преобразование строки в объект logger |
И нам нужно запретить авто-конвертирующего конструктора:
1 2 3 4 5 6 7 8 | class logger { public: explicit logger(const LPCTSTR pathToLog); } // ... logger log = "log.txt"; // работать не будет logger log = logger("log.txt"); // будет работать // копирующий конструктор, который тоже создается автоматически |