C++中的友元声明-公共和私有之间的区别

Friend declaration in C++ - difference between public and private

本文关键字:之间 区别 友元 声明 C++      更新时间:2023-10-16

将友元函数/类声明为private或public有区别吗?我似乎在网上找不到任何关于这件事的信息。

我指的是之间的区别

class A
{
 public: 
      friend class B;
 };

class A
{
 private: //or nothing as the default is private
      friend class B;
 };

有区别吗?

不,没有区别——你只知道类B是类a的朋友,现在可以访问其私有和受保护的成员,仅此而已。

由于语法friend class B没有声明类A成员,所以无论在哪里编写,类B都是类A的朋友。

此外,如果在Aprotected部分中写入friend class B,则并不意味着B只能访问Aprotectedpublic成员。

永远记住,一旦B成为A的朋友,它就可以访问A任何成员,无论您在哪个部分编写friend class B

c++有"隐藏的朋友"的概念:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1601r0.pdf

这只适用于内联定义的友元函数。这使得函数只能通过依赖于参数的查找找到,并将它们从封闭的命名空间中删除。

友元声明出现在类主体中,并将函数或其他类访问权限授予友元声明所在类的私有和受保护成员。

因此,访问说明符对友元声明的含义没有影响(它们可以出现在private:或public:部分,没有区别)。