JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.2:C++ 用户指南
search filter icon
search icon

文档信息

前言

第 1 部分C++ 编译器

1.  C++ 编译器

2.  使用 C++ 编译器

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

第 2 部分编写 C++ 程序

4.  语言扩展

5.  程序组织

6.  创建和使用模板

7.  编译模板

8.  异常处理

9.  改善程序性能

10.  生成多线程程序

第 3 部分库

11.  使用库

11.1 C 库

11.2 随 C++ 编译器提供的库

11.2.1 C++ 库描述

11.2.2 访问 C++ 库的手册页

11.2.3 缺省 C++ 库

11.3 相关的库选项

11.4 使用类库

11.4.1 iostream

11.4.2 complex

11.4.3 链接 C++ 库

11.5 静态链接标准库

11.6 使用共享库

11.7 替换 C++ 标准库

11.7.1 可以替换的内容

11.7.2 不可替换的内容

11.7.3 安装替换库

11.7.4 使用替换库

11.7.5 标准头文件实现

11.7.5.1 替换标准 C++ 头文件

11.7.5.2 替换标准 C 头文件

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  使用复数运算库

15.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

11.4 使用类库

通常,使用类库分两个步骤:

  1. 在源码中包括适当的头文件。

  2. 将程序与目标库链接。

11.4.1 iostream

C++ 编译器提供两种 iostream 实现

如果已有 C++ 源,那么代码可能象以下示例一样使用传统 iostream。

// file prog1.cc
#include <iostream.h>

int main() {
    cout << "Hello, world!" << endl;
    return 0;
}

以下命令在兼容模式下编译 prog1.cc,并将其链接到名为 prog1 的可执行程序中。传统 iostream 库是 libC 的一部分,兼容模式下缺省链接该库。

example% CC -compat prog1.cc -o prog1

下一个示例使用标准 iostream。

// file prog2.cc
#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

以下命令编译 prog2.cc 并将其链接到名为 prog2 的可执行程序中。该程序在标准模式下编译,且缺省链接包括标准 iostream 库的 libCstd

example% CC prog2.cc -o prog2

有关编译模式的完整讨论,请参见《C++ 迁移指南》。

11.4.2 complex

标准库提供了模板化的 complex 库,该库与 C++ 4.2 编译器提供的 complex 库类似。如果在标准模式下编译,必须使用 <complex> 而非 <complex.h>。不能在兼容模式下使用 <complex>

在兼容模式下,必须在链接时显式请求 complex 库。在标准模式下,complex 库包括在 libCstd 中,缺省情况下链接该库。

标准模式下,没有 complex.h 头文件。在 C++ 4.2 中,"complex" 是类名称,但在标准 C++ 中,"complex" 是模板名称。不可能提供可使旧的代码不加修改就可工作的 typedef。因此,为使用复数的 4.2 版编写的代码需要某些简单的编辑,以便使用标准库。例如,以下代码是为 4.2 版编写的,并将在兼容模式下编译。

// file ex1.cc (compatibility mode)
#include <iostream.h>
#include <complex.h>

int main()
{
    complex x(3,3), y(4,4);
    complex z = x * y;
    cout << "x=" << x << ", y=" << y << ", z=" << z << endl;
}

以下示例在兼容模式下编译并链接 ex1.cc,然后执行该程序。

example% CC -compat ex1.cc -library=complex
example% a.out
x=(3, 3), y=(4, 4), z=(0, 24)

下面将 ex1.cc 重写为 ex2.cc 以在标准模式下编译:

// file ex2.cc (ex1.cc rewritten for standard mode)
#include <iostream>
#include <complex>
using std::complex;

int main()
{
     complex<double> x(3,3), y(4,4);
     complex<double> z = x * y;
     std::cout << "x=" << x << ", y=" << y << ", z=" << z <<
       std::endl;
}

以下示例在标准模式下编译并链接重写的 ex2.cc,然后执行该程序。

% CC ex2.cc
% a.out
x=(3,3), y=(4,4), z=(0,24)

关于使用复数运算库的更多信息,请参见表 13-4

11.4.3 链接 C++ 库

下表列出了链接 C++ 库的编译器选项。有关更多信息,请参见A.2.49 -library=l[ ,l...]

表 11-2 链接 C++ 库的编译器选项

编译模式
选项
传统 iostream
–compat=4

–compat=5

不需要

-library=iostream

complex
–compat=4

-compat=5

-library=complex

不需要

Tools.h++ 版本 7
–compat=4

–compat=5

-library=rwtools7

-library=rwtools7,iostream

-library=rwtools7_std

Tools.h++ 版本 7 调试
–compat=4

–compat=5

-library=rwtools7_dbg

-library=rwtools7_dbg,iostream

-library=rwtools7_std_dbg

垃圾收集
–compat=4

–compat=5

-library=gc

-library=gc

STLport 版本 4
–compat=5
-library=stlport4
STLport 版本 4 调试
–compat=5
-library=stlport4_dbg
Apache stdcxx 版本 4
-compat=5
-library=stdcxx4