gpt4 book ai didi

c++ - 友元函数在类中不可见

转载 作者:可可西里 更新时间:2023-11-01 15:10:32 25 4
gpt4 key购买 nike

我有以下代码:

struct M {
friend void f() {}
M() {
f(); // error: 'f' was not declared in this scope
}
};

int main() {
M m;
}

Live example

g++4.8 和 clang3.4 都无法编译它,因为 fM 中不可见,或者他们是这么说的。

但是,标准给出了类似代码的例子

class M {
friend void f() { } // definition of global f, a friend of M,
// not the definition of a member function
};

然后说

A friend function defined in a class is in the (lexical) scope of the class in which it is defined.

(ISO/IEC 14882:2011 11.3 Friends [class.friend] p6, p7)

由此我无法理解编译器如何找不到在使用它的同一类中定义的 f

这两个编译器不太可能有相同的错误。
那么,我错过了什么?

最佳答案

友元声明声明周围命名空间中名为f 的函数是该类的友元;但它没有将名称 f 引入命名空间。在命名空间中声明之前,它不可用(除了通过参数相关的查找)。

相关规则是C++11 7.3.1.2/3:

If a friend declaration in a non-local class first declares a class or function the friend class or function is a member of the innermost enclosing namespace. The name of the friend is not found by unqualified lookup or by qualified lookup until a matching declaration is provided in that namespace scope.

关于c++ - 友元函数在类中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23540764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com