Для того, чтобы вызвать перегрузку bool
необходимо следующее преобразование:
const char[6] ---> const char* ---> bool
Для того, чтобы вызвать перегрузку std::string
требуется следующее преобразование:
const char[6] ---> const char* ---> std::string
Это включает в себя определенное пользователем преобразование (с помощью конструктора преобразования от std::string
). Любая последовательность преобразования без пользовательского преобразования предпочтительна в последовательности с пользовательским преобразованием.
При сравнении основных форм последовательностей преобразования неявных (как это определенно в 13.3.3.1):
- стандартная последовательность преобразования (13.3.3.1.1) является лучшей последовательностью преобразования, чем гается определена последовательность преобразования или последовательность преобразования многоточия и
- [...]
стандартная последовательность преобразования один с участием только стандартной совместной nversions. Пользовательская последовательность преобразований представляет собой единое пользовательское преобразование.
Задайте себе вопрос: что это за тип «привет» и что он может быть преобразован? –
Duplicate: http://stackoverflow.com/a/8359260/1171191 – BoBTFish
Это станет более распространенной проблемой. Адвокаты Modern C++ (включая меня) не учат char * strings сначала или даже вообще. Тем не менее, буквальные строки являются символами * и, очевидно, это становится неинтуитивным для новичков. Это настоящая проблема. –