【发布时间】:2020-11-05 21:12:36
【问题描述】:
如果我有一个函数模板,其模板参数具有默认参数,并且该函数采用类型参数的非默认参数,那么语言中允许永远不会使用的默认参数的意义何在? :
template <class T = int>
void foo(T x){cout << x << endl;}
int main()
{
foo("hi"); // T is char const *
foo(); // error
}
正如您所见,T=int 永远无法使用,因为该函数没有默认参数,因此在此上下文中的编译器总是从传递给foo 的参数中推断出T 的类型。
【问题讨论】:
-
你的函数不带参数吗?调用一个需要参数的函数没有它意味着什么?
-
几乎可以肯定,因为尝试实际证明类型推断对于某些给定函数总是可以成功的成本相对较高,并且在可以证明它处于这种情况时发出警告相对没有意义。
标签: c++ templates type-deduction default-arguments