跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:C++ 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
下面的代码是无效的:
class A { friend static void foo(<args>); ... };
因为类名具有外部链接并且所有定义必须是相等的,所以友元函数也必须具有外部链接。但是,如果使用 -features=extensions 选项,编译器将接受该代码。
程序员处理该无效代码的方法大概是在类 A 的实现文件中提供非成员 "helper" 函数。可以通过使 foo 成为静态成员函数得到相同效果。如果不要客户端调用函数,则可以使该函数私有化。
注 - 如果使用该扩展,则任何客户端都可以“劫取”您的类。任何客户端都可以包括类的头文件,然后定义其自身的静态函数 foo,该函数将自动成为类的友元。结果就好像是您使类的所有成员成为了公共的。