C++中函数模板的类型推导

type deduction of function template in C++

这是 C++ Primer 中的示例。第 16 章模板和泛型编程

有一个非类型模板参数的例子。

template<unsigned N, unsigned M>
int compare(const char (&p1)[N], const char (&p2)[M])
{
  return strcmp(p1, p2);
}
compare("hi", "mom");

作者表示

the compiler will use the size of the literals to instantiate a version of the template with the sizes substituted for N and M.

我不明白这种转换。为什么编译器知道它应该使用字符串的大小来实例化这个模板?难道只是因为参数写在数组大小的from中?

谢谢。

"hi" 不是 string,而是 字符串文字 ,类型为 char const [3]。同样,"mom" 的类型为 char const [4].

编译器在进行函数模板参数推导时仅使用此类型信息来推导这些字符串文字的数组边界。