“朋友”关系可以在 C++ 的类之间转移吗?
Posted
技术标签:
【中文标题】“朋友”关系可以在 C++ 的类之间转移吗?【英文标题】:Can the "friend" relationship be transferred among C++'s class? 【发布时间】:2011-09-18 14:30:24 【问题描述】:假设 A 类是 B 类的朋友,B 是 C 类的朋友,A 是 C 的朋友还是 C 是 A 的朋友,或者两者兼而有之,或者没有?
【问题讨论】:
友谊不能通过友谊或继承来转移。 Friend scope in C++ 的可能重复项 【参考方案1】:不,C++ 中的友谊是不可传递的。
来自 C++03 标准,11.4-8:
友谊既不是遗传的,也不是传递的。示例:
class A
friend class B;
int a;
;
class B
friend class C;
;
class C
void f(A* p)
p->a++;
// error: C is not a friend of A
// despite being a friend of a friend
;
class D : public B
void f(A* p)
p->a++;
// error: D is not a friend of A
// despite being derived from a friend
;
【讨论】:
【参考方案2】:没有。见C++FAQ:
友谊不是继承、传递或互惠的
【讨论】:
【参考方案3】:C++ 类友谊不会以这种方式传播,因此 A 类不会成为 C 类的朋友。就像在 Facebook 上,如果您的一个朋友与某人交朋友,该人不会自动成为您的朋友 =)
【讨论】:
以上是关于“朋友”关系可以在 C++ 的类之间转移吗?的主要内容,如果未能解决你的问题,请参考以下文章
yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称平等的
我可以使用 PayPal API 将资金从一个 PayPal 账户转移到另一个账户而无需支付任何费用吗?