7

这合法吗?如果没有,以下代码是否允许这样做?

class Foo
{
    friend class Foo;
}
4

4 回答 4

23

那是多余的。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 的私有数据成员。

于 2010-09-30T16:19:01.813 回答
5

是的,一个类对象Foo访问另一个类对象的私有成员是合法的Foo。这对于复制构造和赋值之类的事情经常是必需的,并且不需要特殊的朋友声明。

于 2010-09-30T16:19:34.637 回答
3

这是多余的和不必要的。此外,我在 g++ 中收到以下警告

warning: class ‘Foo’ is implicitly friends with itself
于 2010-09-30T16:19:28.330 回答
1

如果它们是模板,则类与自身交友是有意义的,因为每个具有不同参数的实例化都是不同的类。

于 2016-10-18T16:07:30.290 回答