Рассмотрим класс foo
с двумя конструкторами, определенными следующим образом:
class foo
{
public:
foo(const std::string& filename) {std::cout << "ctor 1" << std::endl;}
foo(const bool some_flag = false) {std::cout << "ctor 2" << std::endl;}
};
Создайте экземпляр класса с помощью строкового литерала и угадайте, какой конструктор вызывается?
foo a ("/path/to/file");
Вывод:
ctor 2
Я не знаю о вас, но я не считаю это самым интуитивным поведением в истории программирования. Бьюсь об заклад, есть какая-то умная причина для этого, и я хотел бы знать, что это может быть?