从 C++ Primer 中,我知道对于模板的参数参数,只进行两种转换:一种是const 转换,另一种是数组/函数到指针的转换。
然而,当谈到明确的论点时,似乎一切都发生了变化。假设我们有一个模板函数:
template <typename T>
int compare(const T &a, const T &b)
{
// do comparison
}
如果不涉及显式参数,则这样的函数调用是非法的:
compare("foo", "foobar");
当我们明确地这样做时,会发生奇怪的事情(实际上,这可能并不奇怪,但我不明白):
compare<std::string>("foo", "foobar");
似乎在第二次调用中,“foo”和“foobar”被转换为std::string
,这是有争议的。
模板显式参数有什么特殊规则吗?谢谢。