课堂内朋友的定义

Fro*_*art 2 c++

我可以将友元函数/类的定义放在另一个类中吗?我的意思是这样的:

class Foo
{
    friend void foo() {} // 1
    friend class Bar {}; // 2
};
Run Code Online (Sandbox Code Playgroud)

gcc编译好友函数,但无法编译好友类.

Dav*_*eas 6

您可以在友元声明中定义一个friend函数,它具有无法以任何其他方式获取的有趣行为(在封闭类型为模板的情况下).

你不能在朋友声明中定义一个friend类,也没有必要.如果要创建具有完全访问权限的内联新类型,则只需创建嵌套类型即可.作为会员,它将完全访问封闭类型.唯一的区别是在命名空间级别找不到类型,但是如果需要可以添加typedef(或者,在命名空间级别定义类,只是声明类中的友谊).

class Outer {
   int x;
   class Inner {
      static void f( Outer& o ) { o.x = 5; } // fine
   };
};
Run Code Online (Sandbox Code Playgroud)