访问内联友元函数:词法作用域和实际作用域
在类中声明内联友元函数时,重要的是不仅要考虑它们的词法作用范围以及它们的实际范围。从词法上讲,此类函数驻留在定义它们的类中。但是,它们的实际可访问性可能会受到上下文的限制。
根据 C 标准 (ISO/IEC 14882:2011),当朋友函数在类中使用非限定标识符声明,它引用最近的封闭命名空间范围内的函数。但是,此友元声明不会使该函数对该范围内的正常查找可见。相反,它只能通过参数相关查找 (ADL) 来访问它。
标准的 7.3.1.2/3 中强调了此行为:
“如果朋友声明在非-local class 首先声明一个类或函数,友元类或函数是最内层封闭命名空间的成员。通过非限定查找或限定查找直到找到友元名称。在该命名空间范围内提供了匹配的声明。”
本质上,内联友元函数只能通过 ADL 调用,在不提供参数时这是不可能的。因此,尝试直接通过类的封闭范围或通过成员函数调用此类函数将导致编译错误,如提供的代码示例中所示。
以上是如何在 C 中访问内联友元函数?的详细内容。更多信息请关注PHP中文网其他相关文章!