为了研究函数模板的重载,我写了两个函数:
template <typename T>
void pe16_61_compare(const T&, const T&) {
cout <<"template pe16_61_compare(T, T) called" << endl;
}
// plain functions to handle C-style character strings
void pe16_61_compare(const char*, const char*) {
cout <<"normal func pe16_61_compare(...) called" << endl;;
}
然后我定义了一些变量并调用了函数:pe16_61_compare
const char const_arr1[] = "world", const_arr2[] = "hi";
char ch_arr1[] = "world";
// first call
pe16_61_compare(ch_arr1, const_arr1);
// second call
pe16_61_compare(const_arr1, const_arr2);
输出结果是:
template pe16_61_compare(T, T) called
normal func pe16_61_compare(...) called
让我感到困惑的是,第一次调用调用了模板函数。对我来说,对于第一次调用,两个 pe16_61_compare 函数都是可行的函数并且具有相同的转换等级(非常量到常量和数组到指针),据说在这种情况下,模板函数应该从一组可行的功能。
谁能告诉我为什么?谢谢你考虑我的问题!