内联友元函数的可见性范围
尽管在类中定义了内联友元函数,但它们的实际范围超出了类的边界。 C 标准规定,内联友元函数的名称引用在最近的封闭命名空间范围中声明的函数。
但是,在该命名空间内提供匹配声明之前,无法通过非限定或限定查找访问此声明的函数。范围。因此,从类本身、封闭作用域或成员函数直接调用友元函数将导致错误。
此限制源于以下事实:友元函数是在类中声明的,而没有覆盖或重新定义现有的函数名称。因此,编译器无法识别类或封闭命名空间范围中的函数,直到在该命名空间中遇到显式声明。
要访问内联友元函数,可以使用参数相关查找 (ADL) 。 ADL 允许编译器根据调用中使用的参数类型来搜索函数。这种方法符合以下原则:函数被认为与作为参数传递的类型“相关”。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3