Tôi có định nghĩa sau.Quá tải hàm mẫu trong 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;
}
Sau đó nó ra
1
Từ hiểu biết của tôi, cả hai phiên bản phải trải qua một sự chuyển đổi const. Sau đó, void foo(const T *s)
là chuyên biệt hơn và cần được gọi. Tuy nhiên trình biên dịch đã chọn void foo(const T& s)
. Giải thích là gì?
'const T & s' -> 'T const & s' ->' T = char * '->' char * const &' –
tôi biên dịch nó và vẫn không thể tin được chọn 1 – bolov