首页 > 解决方案 > 为什么默认参数在模板函数中不起作用?

问题描述

struct A {};

template<typename T>
void f(int n, T m = 3.14159)
{}

int main()
{    
    f(8, A{}); // ok
    f(8); // error: no matching function for call to 'f'
}

在线演示

为什么默认参数在模板函数中不起作用?


编辑:我也尝试过,想知道为什么它不起作用。

void g(int, auto = 3.14159)
{}

标签: c++functiontemplatesstandardsoverload-resolution

解决方案


默认函数参数不影响模板参数推导。

您还需要模板参数的默认参数:typename T = double.


至于void g(int, auto = 3.14159),似乎没有办法解决。


推荐阅读