如果定义以下函数模板
template<typename T>
int compare(const T& lhs, const T& rhs)
{
// body
}
然后
const char* p1 = "abc";
const char* p2 = "efg";
compare(p1, p2);
为什么编译器将T推导为常量char*
(因此lhs和rhs的类型是常量char*const&
)而不是char*
(因此lhs和rhs的类型是常量char*&
)?
当您有常量时(&; LHS
常量
适用于T
类型。 由于T
是指向常量字符的非常量指针,因此,将const char*
应用到该对象时,将得到const char*const
,或者是指向常量字符的常量指针。