这合法吗?如果没有,以下代码是否允许这样做?
class Foo
{
friend class Foo;
}
那是多余的。Foo 已经可以访问所有 Foo 成员。两个 Foo 对象可以访问彼此的成员。
class Foo {
public:
int touchOtherParts(const Foo &foo) {return foo.privateparts;}
private:
int privateparts;
};
Foo a,b;
b.touchOtherParts(a);
上面的代码可以正常工作。B 将访问 a 的私有数据成员。
是的,一个类对象Foo
访问另一个类对象的私有成员是合法的Foo
。这对于复制构造和赋值之类的事情经常是必需的,并且不需要特殊的朋友声明。
这是多余的和不必要的。此外,我在 g++ 中收到以下警告
warning: class ‘Foo’ is implicitly friends with itself
如果它们是模板,则类与自身交友是有意义的,因为每个具有不同参数的实例化都是不同的类。