首页 >后端开发 >C++ >为什么 C 不能从默认函数参数推导出模板参数?

为什么 C 不能从默认函数参数推导出模板参数?

Linda Hamilton
Linda Hamilton原创
2024-11-05 08:07:02341浏览

Why Can't C   Deduce Template Parameters from Default Function Arguments?

从默认函数参数推导模板参数

编译器无法从提供的代码中的默认函数参数推导模板参数可归因于 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn