首页 > 后端开发 > C++ > 为什么 C 函数模板的参数相关查找 (ADL) 失败?

为什么 C 函数模板的参数相关查找 (ADL) 失败?

Mary-Kate Olsen
发布: 2024-12-11 08:48:11
原创
728 人浏览过

Why Does Argument-Dependent Lookup (ADL) Fail for C   Function Templates?

ADL 查找函数模板失败

在 C 中,参数相关查找 (ADL) 可以在函数模板中搜索函数名称的声明与函数调用中的参数关联的命名空间。然而,C 规范中对于函数模板和 ADL 是有限制的。

限制

根据 C 标准 14.8.1.6,ADL 没有适用于函数模板,除非在调用时存在同名的可见函数模板。这意味着,对于具有显式模板参数的函数模板,调用必须具有带有可见函数模板的正确语法形式。

示例

考虑以下示例:

namespace ns {
    struct foo {};
    template<int i> void frob(foo const&amp;) {}
    void non_template(foo const&amp;) {}
}

int main() {
    ns::foo f;
    non_template(f); // This is fine.
    frob<0>(f); // This is not.
}
登录后复制

在此示例中,ADL 查找并解析第一次调用的 non_template,因为 non_template 是一个普通函数。然而,对于第二次调用,frob 是一个函数模板。由于调用时没有可见的 frob 函数模板,ADL 失败,并且调用在语法上格式不正确。

解决限制

至克服这个限制,确保函数模板在调用范围内可见。这可以通过在当前命名空间中声明函数模板或使用包含函数模板的命名空间来限定调用来实现。

以上是为什么 C 函数模板的参数相关查找 (ADL) 失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板