C 中的参数相关查找和函数模板
参数相关查找 (ADL) 是一种语言功能,使编译器能够搜索标识符在与函数调用的参数关联的命名空间内。虽然 ADL 通常会查找函数,但在某些情况下无法找到函数模板。
C 标准解释
C 标准 (2003) 第 14.8.1.6 节指出那:
“但是当使用带有显式模板参数的函数模板时,调用没有正确的语法形式,除非在调用时存在具有该名称可见的函数模板。如果没有可见的此类名称,则该调用在语法上不正确,并且依赖于参数的查找不适用。”
示例
考虑以下示例:
namespace ns { struct foo {}; template<int i> void frob(foo const&) {} void non_template(foo const&) {} } int main() { ns::foo f; non_template(f); // This is fine. frob<0>(f); // This is not. }
main 中的最后一个调用(frob(f);) 无法编译,因为在调用范围内没有名称为 frob 的函数模板可见。 ADL 找不到 frob;因为编译器的语法不认为函数模板是有效的函数调用。
其他注意事项
以上是为什么在 C 中参数依赖查找无法找到带有显式模板参数的函数模板?的详细内容。更多信息请关注PHP中文网其他相关文章!