首页 > 后端开发 > C++ > C 中内联友元函数的作用域实际上是如何工作的?

C 中内联友元函数的作用域实际上是如何工作的?

Barbara Streisand
发布: 2024-11-25 02:13:21
原创
618 人浏览过

How Does the Scope of an Inline Friend Function in C   Actually Work?

内联友元函数的范围

在 C 上下文中,内联友元函数的词法作用域扩展到它所定义的类。然而,确定其实际范围需要进一步探索。

ISO C 标准指定,当在命名空间范围的类中声明内联友元函数时,它会在最近的封闭命名空间范围中命名一个函数。如果该函数尚未声明,则友元声明本身不会使其在该范围内可见以进行非限定查找。

相反,友元声明允许通过参数相关的查找(ADL )。这意味着只要函数参数的类型与包含函数声明的命名空间范围匹配,就可以使用其非限定名称来调用友元函数。

因此,在类中声明的内联友元函数只能通过以下方式调用: ADL,除非它们随后在其封闭的命名空间范围中声明或定义。这确保了只有当参数允许明确的名称解析时才能访问该函数。

以下代码片段说明了此行为:

namespace foo {
  struct bar {
    friend void baz();
  };
}

// Compilation error in main: 'baz' is not accessible through unqualified lookup
int main() {
  foo::baz();
}
登录后复制

以上是C 中内联友元函数的作用域实际上是如何工作的?的详细内容。更多信息请关注PHP中文网其他相关文章!

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