Почему первый вызов функции (cm(car);
) связывается с первой функцией?
Я понимаю, что второй вызов связан со второй функцией, потому что он не шаблон, несмотря на то, что оба являются идеальными.
Если первая функция определена как не-шаблон с фиксированной длиной массива, как:
void cm(const char (&h)[8]) {cout << "const char (&)[8]" << endl;}
чем снова, он будет выбран по второму (второй вызов будет неоднозначным таким образом).
код:
template<size_t N> void cm(const char (&h)[N])
{std::cout << " const (&)[N] " << endl;}
void cm(const char * h)
{cout << " const char * " << endl;}
int main()
{
char car[] = "errqweq";
const char ccar[] = "errqweq";
cm(car);
cm(ccar);
}
Вывод:
const (&)[N]
const char *