编译器无法从提供的代码中的默认函数参数推导模板参数可归因于 C 语言的规定语言规范。
在 C 03 中,如规范第 §14.8.2/17 中所引用,“模板类型参数不能从函数默认参数的类型推断出来。”此限制明确禁止使用默认参数进行模板参数推导。
虽然 C 11 引入了为函数模板指定默认模板参数的可能性,但默认函数参数仍然无法用于模板参数推导。具体来说,C 11 §14.8.2.5/5 指出“非推导上下文是:...函数参数的参数类型中使用的模板参数,该函数参数具有默认参数,该默认参数在调用哪个参数时使用推导正在进行中。”
因此,所提供的代码无法从默认参数 0.0f 推导出 T 的模板参数,这符合语言规范。要解决此问题,在调用 bar 函数时必须提供显式模板参数,如以下修改后的代码所示:
a.bar<float>(5);
以上是为什么 C 不能从默认函数参数推导出模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!