Khi tôi có hai quá tải chức năng templated như thế này:hàm mẫu quá tải: const * vs const &
template<class T>
void foo(T const&)
{
// do something with a const reference
cout << "const reference version";
}
template<class T>
void foo(T const*)
{
// do something with a const pointer
cout << "const pointer version";
}
Tại sao biên dịch chọn phiên bản đầu tiên khi khởi tạo với một kiểu con trỏ không const?
int* bar;
foo(bar); // prints "const reference version"
char const* baz;
foo(baz); // prints "const pointer version"
Bạn có thể tìm thấy giải thích tốt về vấn đề này trên kênh 9: http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core -Cpp-3-of-n. Nhưng về cơ bản Mark B trả lời câu hỏi của bạn. – mkaes