JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:C++ 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分C++ 编译器

1.  C++ 编译器

2.  使用 C++ 编译器

3.  使用 C++ 编译器选项

第 2 部分编写 C++ 程序

4.  语言扩展

4.1 链接程序作用域

4.1.1 与 Microsoft Windows 兼容

4.2 线程局部存储

4.3 用限制较少的虚函数覆盖

4.4 对 enum 类型和变量进行前向声明

4.5 使用不完整 enum 类型

4.6 将 enum 名称作为作用域限定符

4.7 使用匿名 struct 声明

4.8 传递匿名类实例的地址

4.9 将静态名称空间作用域函数声明为类友元

4.10 将预定义 __func__ 符号用于函数名

4.11 支持的属性

4.11.1 __packed__ 属性详细信息

4.12 对 Intel MMX 和扩展的 x86 平台内部函数的编译器支持

5.  程序组织

6.  创建和使用模板

7.  编译模板

8.  异常处理

9.  改善程序性能

10.  生成多线程程序

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

4.9 将静态名称空间作用域函数声明为类友元

下面的代码是无效的:

class A {
  friend static void foo(<args>);
  ...
};

因为类名具有外部链接并且所有定义必须是相等的,所以友元函数也必须具有外部链接。但是,如果使用 -features=extensions 选项,编译器将接受该代码。

程序员处理该无效代码的方法大概是在类 A 的实现文件中提供非成员 "helper" 函数。可以通过使 foo 成为静态成员函数得到相同效果。如果不要客户端调用函数,则可以使该函数私有化。


注 - 如果使用该扩展,则任何客户端都可以“劫取”您的类。任何客户端都可以包括类的头文件,然后定义其自身的静态函数 foo,该函数将自动成为类的友元。结果就好像是您使类的所有成员成为了公共的。