Порядок не имеет значения. Вызываемый метод выбирается путем анализа типов аргументов и сопоставления их с типами параметров. Если нет точного соответствия, выбирается метод наилучшего соответствия. В вашем случае это метод bool
.
Вы предоставляете аргумент типа const char[7]
. В соответствии с правилами перегрузки C ++, лучший способ здесь - разрешить распаду const char[7]
до const char *
, а затем преобразовать его в bool
с помощью стандартного преобразования. Путь с преобразованием в std::string
считается худшим, поскольку он будет включать пользовательское преобразование из const char *
в std::string
. Обычно пользовательские преобразования теряют процесс разрешения перегрузки по сравнению со стандартными преобразованиями. Это то, что происходит и в вашем случае.
Если вам нужна здесь версия std::string
, предоставьте явную перегрузку для типа const char *
и делегируйте вызов версии std::string
, явно преобразовав аргумент в тип std::string
void Method(const char *paramater /* sic! */)
{
Method(std::string(paramater));
}