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.  编译模板

8.  异常处理

9.  改善程序性能

9.1 避免临时对象

9.2 使用内联函数

9.3 使用缺省运算符

9.4 使用值类

9.4.1 选择直接传递类

9.4.2 在不同的处理器上直接传递类

9.5 缓存成员变量

10.  生成多线程程序

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

9.4 使用值类

包括结构和联合在内的 C++ 类通过值来传递和返回。对于 Plain-Old-Data (POD) 类,C++ 编译器需要像 C 编译器一样传递结构。这些类的对象直接进行传递。对于包含用户定义复制构造函数的类的对象,要求编译器有效地构造对象的副本,将指针传递到副本,并在返回后销毁副本。这些类的对象间接进行传递。编译器也可以选择介于这两个需求之间的类。不过,该选择影响二进制的兼容性,因此编译器对每个类的选择必须保持一致。

对于大多数编译器,直接传递对象可以加快执行速度。这种执行速度的改善对于小值类(例如复数和概率值)来说尤其明显。有时为了改善程序执行效率,您可以设计更可能直接传递而不是间接传递的类。

如果类具有以下任何一个特征,则它将间接传递:

否则,类被直接传递。

9.4.1 选择直接传递类

尽可能直接传递类:

9.4.2 在不同的处理器上直接传递类

C++ 编译器直接传递的类和联合与 C 编译器传递结构或联合完全相同。不过,C++ 结构和联合在不同的体系结构上进行不同的传递。

表 9-1 在不同体系结构上结构和联合的传递

体系结构
说明
SPARC V7/V8
通过在调用程序内分配存储并将指针传递到该存储,传递并返回结构和联合。(也就是说,所有的结构和联合都通过引用传递。)
SPARC V9
不超过 16 个字节(32 个字节)的结构在寄存器中传递。通过在调用程序内分配存储并将指针传递到该存储,传递并返回联合和所有其他结构。(也就是说,小的结构在寄存器中传递,而联合和大的结构通过引用传递。)因此,小值类与基元类具有相同的传递效率。
x86 平台
结构和联合通过在堆栈上分配空间并将参数复制到堆栈上来传递。通过在调用程序的帧中分配临时对象并将临时对象的地址作为隐式的第一个参数传递,返回结构和联合。