【发布时间】:2017-09-13 19:37:44
【问题描述】:
对于这段简化的代码,我收到以下错误:
错误:参数太少而无法运行 std::cout
int g(int a = 2, int b = 1)
{
return a + b;
}
template<class Func>
void generic(Func f)
{
std::cout << f();
}
int main()
{
generic(g);
}
我不知道为什么函数 f 的默认参数没有传递给函数 generic 的原因。它的行为就像 f 没有任何默认参数...
怎么了?
如何正确转发默认参数?
【问题讨论】:
-
我猜在传递函数指针的时候,它已经为需要2个参数的函数选择了一个重载。
-
语言律师提醒...
a和b是函数参数。这些参数的默认 arguments 为 2 和 1,rsp。所以a是参数,a在运行时的值就是参数。