内联友元函数的范围
在 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中文网其他相关文章!