Почему в C ++ существует неявное преобразование типов из указателей в bool?

Рассмотрим класс 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

Я не знаю о вас, но не знаю ' Я считаю, что это наиболее интуитивное поведение в истории программирования. Бьюсь об заклад, для этого есть какая-то умная причина, и я хотел бы знать, что это может быть?

14
задан Oystein 6 November 2010 в 01:57
поделиться