Mam następującą definicję.Przeciążanie funkcji szablonu w C++
using namespace std;
template <typename T>
void foo(const T &s) {
cout << 1;
}
template <typename T>
void foo(const T *s) {
cout << 2;
}
int main(int argc, const char * argv[]) {
char str[] = "ss";
char *s = str;
foo(s);
return 0;
}
następnie przesyła je
1
Z mojego zrozumienia, obie wersje mają przejść przez const nawrócenia. Następnie void foo(const T *s)
jest bardziej wyspecjalizowany i powinien zostać wywołany. Jednak kompilator wybrał void foo(const T& s)
. Jakie jest wytłumaczenie?
'const T & s' ->' const T & s' -> 'T = char *' -> 'char * const &' –
jestem kompilowanie go i nadal nie mogę uwierzyć, że wybiera 1 – bolov