explicit конструктор в C++

Ключевое слово 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"); // будет работать
  // копирующий конструктор, который тоже создается автоматически