Mae*_*tro 1 c++ templates default-arguments type-deduction
如果我有一个函数模板,它的模板参数具有默认参数,并且该函数采用类型参数的非默认参数,那么语言中允许该永远不会使用的默认参数有什么意义?:
template <class T = int>
void foo(T x){cout << x << endl;}
int main()
{
foo("hi"); // T is char const *
foo(); // error
}
Run Code Online (Sandbox Code Playgroud)
如您所见T=int,永远无法使用,因为该函数没有默认参数,因此此上下文中的编译器总是T从传递给foo.
但它可以使用。这是一个例子。
auto* foo_ptr = &foo<>; // The default template argument is used.
Run Code Online (Sandbox Code Playgroud)
函数调用表达式并不是唯一需要找出函数模板参数的上下文。