只是想确认这是否是拼写错误,或者我不明白函数模板参数匹配是如何工作的。鉴于这两个函数定义:
// print any type we don't otherwise handle
template <typename T> string debug_rep(const T &t)
{
ostringstream ret; // see 8.3
ret << t; // uses T's output operator to print a representation of t
return ret.str(); // return a copy of the string to which ret is bound
}
// print pointers as their pointer value,
// followed by the object to which the pointer points
// NB: this function will not work properly with char*; see 16.3
template <typename T> string debug_rep(T *p)
{
ostringstream ret;
ret << "pointer: " << p; // print the pointer's own value
if (p)
ret << " " << debug_rep(*p); // print the value to which p points
else
ret << " null pointer"; // or indicate that the p is null
return ret.str(); // return a copy of the string to which ret is bound
}
考虑以下电话:
const string *sp = &s;
cout << debug_rep(sp) << endl;
这两个模板都是可行的,两者都提供完全匹配:
debug_rep(const string* &)
,第一个实例化
T
绑定到const string*
的模板版本
这是一个错误吗?由于T
已在函数参数 string*
绑定到const
debug_rep(const string*)
,第二个实例化
T
绑定到const string
的模板版本。我的第一个问题是粗体,在上面。跟进问题:如果这不是拼写错误,并且T
绑定到const string*
,那么这意味着我们不会debug_rep(const const string* &)
(对于第一个函数),而不是debug_rep(const string* &)
(我只是将T
替换为const string*
)。如果它不暗示debug_rep(const const string* &)
,那么函数参数中的const
去了哪里?我没有得到什么?...
提前谢谢。