【发布时间】:2014-06-09 12:39:46
【问题描述】:
为什么这个 C++11 程序不工作:
template <typename T>
void f(T t = 42) {}
int main() { f(); }
为什么不能从默认参数42推导出T?
【问题讨论】:
-
如果你定义了一个默认参数并且显然知道类型,那为什么还要使用模板呢?
-
这种情况也需要你默认
T。这可能不是问题的重点,但确实解决了问题。 -
@Mario,这样您就不会局限于默认参数的类型。
-
一旦专业化,当然,但不要认为没有它就可以做到,或者定义一个默认类型名就足够了?对于任何其他类型,默认参数会被跳过吗?从来没有真正尝试过做这样的事情。
-
@Mario,是的,只要给模板参数一个默认参数
int,你传递给f的任何东西都会使用它的值和它的类型。如果什么都不通过,T将是int而t将是 42。