struct foo {
int x;
friend int x(foo f) { return f.x; }
friend int y(foo f);
};
int y(foo f) { return x(f); } // no problem
但这是一个错误:
struct foo {
int x;
friend int x(foo f) { return f.x; }
friend int y(foo f) { return x(f); } // error: invalid use of foo::x data member
};
为什么不允许这两种(dis)?
答案 0 :(得分:3)
原因是在第一种情况下,友谊将函数声明注入到封闭的命名空间中,因此对x
的全局范围调用只能看到一个x
。
在第二个示例中,x
在该范围内具有两个含义:全局友元函数和变量(可能会影响全局友元函数)。