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.  语言扩展

5.  程序组织

6.  创建和使用模板

7.  编译模板

7.1 详细编译

7.2 系统信息库管理

7.2.1 生成的实例

7.2.2 整个类实例化

7.2.3 编译时实例化

7.2.4 模板实例的放置和链接

7.3 外部实例

7.3.1 可能的高速缓存冲突

7.3.2 静态实例

7.3.3 全局实例

7.3.4 显式实例

7.3.5 半显式实例

7.4 模板系统信息库

7.4.1 系统信息库结构

7.4.2 写入模板系统信息库

7.4.3 从多模板系统信息库读取

7.4.4 共享模板系统信息库

7.4.5 通过 -instances=extern 实现模板实例自动一致

7.5 模板定义搜索

7.5.1 源文件位置约定

7.5.2 定义搜索路径

7.5.3 诊断有问题的搜索

8.  异常处理

9.  改善程序性能

10.  生成多线程程序

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

7.2 系统信息库管理

CCadmin(1) 命令管理模板系统信息库(只能与选项 -instances=extern 一起使用)。例如,程序中的更改会造成某些实例化过度,这样会浪费存储空间。CCadmin – clean 命令(以前是 ptclean)清除所有实例及关联数据。实例化仅在需要时才重新创建。

7.2.1 生成的实例

为了生成模板实例,编译器将内联模板函数看作内联函数。编译器像管理其他内联函数一样管理这些内联模板函数,另外本章中的说明不适用于模板内联函数。

7.2.2 整个类实例化

编译器通常是分别实例化各个模板类成员,因此,编译器仅实例化程序中使用的成员。仅用于调试器的方法会因此而不正常地实例化。

可使用两种策略确保调试成员可供调试器使用。

ISO C++ 标准允许开发者编写模板类,对于这些类,可能并不是所有成员都可以合法使用某个给定模板参数。只要非法成员未被实例化,程序就仍然完好。ISO C++ 标准库使用了这种技术。但是,-template=wholeclass 选项会实例化所有成员,因此不能用于此类使用有问题的模板参数实例化的模板类。

7.2.3 编译时实例化

实例化是 C++ 编译器从模板创建可用的函数或对象的过程。C++ 编译器使用了编译时实例化,在编译对模板的引用时强制进行实例化。

编译时实例化的优点是:

如果源文件位于不同的目录或您使用了具有模板符号的库,则模板可以多次实例化。

7.2.4 模板实例的放置和链接

缺省情况下,实例会进入特殊地址区域,链接程序会识别并丢弃重复项。您可以指示编译器使用五个实例放置和链接方法之一: 外部、静态、全局、显式和半显式。

本节讨论了五种实例放置和链接方法。6.3 模板实例化中提供了有关生成实例的其他信息。