0

Почему уступает приоритет преобразование указателя над выведенным шаблоном?

1

У меня возникла проблема с перегрузкой функции в C++, и я не могу понять, почему происходит такое поведение. Я написал функцию для вывода длины строки, которая принимает массив:

template <size_t N>
void foo(const char (&s)[N]) {
    std::cout << "array, size=" << N-1 << std::endl;
}

foo("hello"); // выводит array, size=5

Теперь я хочу расширить функцию foo, чтобы поддерживать также строки, передаваемые как указатели:

void foo(const char* s) {
    std::cout << "raw, size=" << strlen(s) << std::endl;
}

Но, как оказалось, это нарушает изначально задуманное поведение:

foo("hello"); // теперь выводит raw, size=5

Почему это происходит? Разве это не должно требовать преобразования массива в указатель, и тем более шаблон должен быть точным совпадением? Есть ли способ гарантировать, что будет вызвана функция для массива?

0 ответ(ов)

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь