Рассмотрим следующие конструкторы для T:
struct T {
T(const bool) { std::cout << "T(const bool)" << endl; }
T(const std::string&) { std::cout << "T(const std::string&)" << endl; }
};
T t("");
T (const bool)
имеют приоритет над T (const std :: string &)
при построении t? Поскольку вышеуказанный приоритет может вызвать путаницу у пользователей, ожидающих вызова T (const std :: string &)
, что я могу сделать, чтобы получить T (const std :: string &)
неявно вызывается при передаче строковых литералов в конструктор T. На данный момент я нашел единственное решение, которое я нашел, - это добавить еще один конструктор, который имеет наивысший приоритет:
T (const char * s)
{
std :: cout << "T (const char *)" << endl;
* this = std :: string (s);
}
Помимо приведенного выше решения, объявление явного T (const bool)
во избежание путаницы не решает вышеуказанную проблему: в этом случае, хотя T t = ""
теперь запрещено, почему форма T t ("")
все еще разрешена и вызывает T (const bool)
?