将朋友功能/类声明为私有或公共是否有区别?我似乎无法在网上找到任何相关信息。
我的意思是:
之间的区别class A
{
public:
friend class B;
};
和
class A
{
private: //or nothing as the default is private
friend class B;
};
有区别吗?
答案 0 :(得分:122)
不,没有区别 - 你只是说B级是A级的朋友,现在可以访问其私人和受保护的成员,就是这样。
答案 1 :(得分:33)
由于语法friend class B
未声明类A
的成员,因此在您编写它的位置无关紧要,类B
是班级A
的朋友。
另外,如果您在friend class B
的{{1}}部分中写protected
,那么这并不意味着A
只能访问B
和{{1} } protected
的成员。
永远记住,public
成为A
的朋友后,无论您在哪个部分B
,它都可以访问 A
的任何成员。{ 1}}。
答案 2 :(得分:1)
c++ 有“隐藏的朋友”的概念:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1601r0.pdf
这仅适用于内联定义的友元函数。这使得函数只能通过依赖于参数的查找来找到,从封闭的命名空间中删除它们。
答案 3 :(得分:0)
友元声明出现在类主体中,并授予函数或其他类访问友元声明所在类的私有和受保护成员的权限。
因为这样的访问说明符对朋友声明的含义没有影响(它们可以出现在私人:或公开:部分,没有区别)。