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

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

Barbara Streisand
Barbara Streisand原创
2024-11-25 02:13:21585浏览

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中文网其他相关文章!

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