Sun Studio 11: C++ 用户指南



Similar documents
I

《C语言基础入门》课程教学大纲

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

国债回购交易业务指引

深圳市新亚电子制程股份有限公司

修改版-操作手册.doc

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

上海证券交易所会议纪要


18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

2006年顺德区高中阶段学校招生录取分数线

登录、注册功能的测试用例设计.doc

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

世华财讯模拟操作手册

0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

第2章 数据类型、常量与变量

Cybozu Garoon 3 管理员手册

珠江钢琴股东大会

自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 ( 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 ( 首 页

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用

云信Linux SSH认证代理用户手册

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

关于修订《沪市股票上网发行资金申购

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

Template BR_Rec_2005.dot

Microsoft Word - 文件汇编.doc

上海证券交易所会议纪要

三门峡市质量技术监督局清单公示

Microsoft Word - 第3章.doc

教师上报成绩流程图

<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>

 编号:

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审

全国艺术科学规划项目

证券代码: 证券简称:长城电脑 公告编号:

第 一 部 分 MagiCAD for Revit 安 装 流 程

目 录 页 1. 欢 迎 使 用 网 上 预 约 面 谈 访 问 系 统 新 用 户 新 用 户 登 入 帐 户 程 序 启 动 网 上 预 约 面 谈 访 问 帐 户 核 对 帐 户 的 地 址 资 料

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2

Microsoft Word - 第7章 图表反转形态.doc

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

<4D F736F F D20B3D6B2D6CFDEB6EEB1EDB8F1D7EED6D52E646F63>

合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件

徐天宏:《基因天堂》.doc

乐视云视频发行平台 操作手册 V1.1

现 场 会 议 时 间 为 :2016 年 5 月 19 日 网 络 投 票 时 间 为 :2016 年 5 月 18 日 年 5 月 19 日 其 中 通 过 深 圳 证 券 交 易 所 交 易 系 统 进 行 网 络 投 票 的 时 间 为 2016 年 5 月 19 日 9:30-

工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录 企 业 基 本 信 息 查 看 企 业 人 员 信 息 查 看 企 业 基 本 信 息 操 作 企 业 简 介 企 业 章

全国教师资格认定管理信息系统

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

证监会行政审批事项目录

ETF、分级基金规模、份额变化统计

i 1) 系 统 运 作 前 设 定 *1. [2.1 网 页 主 机 名 称 设 定 ] -- 设 定 校 务 系 统 的 主 机 IP 地 址, 以 供 其 他 个 人 电 脑 连 接 及 使 用 该 系 统 *2. [2.3.1 输 入 / 修 改 学 校 资 料 ] -- 输 入 系 统 使

一、资质申请

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

第 四 条 建 设 单 位 对 可 能 产 生 职 业 病 危 害 的 建 设 项 目, 应 当 依 照 本 办 法 向 安 全 生 产 监 督 管 理 部 门 申 请 职 业 卫 生 三 同 时 的 备 案 审 核 审 查 和 竣 工 验 收 建 设 项 目 职 业 卫 生 三 同 时 工 作 可

<4D F736F F D20D6D0B9FABDE1CBE3C9CFBAA3B7D6B9ABCBBECCD8CAE2B7A8C8CBBBFAB9B9D6A4C8AFD5CBBBA7BFAABBA7D2B5CEF1D6B8C4CF2E646F63>

光明乳业股份有限公司

上证指数

中 国 软 科 学 年 第 期!!!

<4D F736F F D20D0A3B7A2A1B A1B BAC5B9D8D3DAD7E9D6AFBFAAD5B9C8ABD0A3BDCCD6B0B9A4B8DACEBBC6B8D3C3B1E4B6AFB9A4D7F7B5C4CDA8D6AA2E646F63>

定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类

年 8 月 11 日, 公 司 召 开 2015 年 第 五 次 临 时 股 东 大 会, 审 议 通 过 了 关 于 公 司 <2015 年 股 票 期 权 激 励 计 划 ( 草 案 )> 及 其 摘 要 的 议 案 关 于 提 请 股 东 大 会 授 权 董 事 会 办 理 公

B-002 行 政 处 罚 在 气 象 探 测 环 境 保 护 范 围 内 从 事 危 害 气 象 探 测 环 境 活 动 的 处 罚 中 华 人 民 共 和 国 气 象 法 第 三 十 五 条 第 一 款 第 二 项 B-003 行 政 处 罚 在

中国石化油品销售企业CRM调研报告

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

<4D F736F F D20B9D8D3DA BDECB1CFD2B5C9FAC5C9C7B2B1A8B5BDB5C8D3D0B9D8B9A4D7F7B5C4CDA8D6AAA3A E362E38A3A92E646F63>

øÕªß∂À≤Ÿ◊˜ ÷≤·

目 录 版 本 更 新 说 明 导 读 读 者 对 象 手 册 内 容 简 介 软 件 简 介 基 本 术 语 技 术 支 持 基 本 流 程 操 作 步 骤... 8


《深圳市场首次公开发行股票网上按市值申购实施办法》.doc

公 开 刊 物 须 有 国 内 统 一 刊 (CN), 发 表 文 章 的 刊 物 需 要 在 国 家 新 闻 出 版 广 电 总 局 ( 办 事 服 务 便 民 查 询 新 闻 出 版 机 构 查 询 ) 上 能 够 查 到 刊 凡 在 有 中 国 标 准 书 公 开

2016年德州市机构编制委员会

·岗位设置管理流程

工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术


四川省农村义务教育学生

4 进 入 交 互 区 设 置 的 组 件 管 理, 在 组 件 管 理 中, 教 师 可 以 选 择 课 程 空 间 中 的 所 有 组 件, 并 通 过 点 击 启 用 或 不 启 用 选 定 组 件 在 课 程 空 间 中 的 显 示 5 进 入 工 作 室 管 理 的 工 作 室 首 页,

四川省卫生厅关于开展医疗美容主诊医师资格考试及换证工作的通知

<433A5C C6B73625C B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A CDA8D3C3B0E6A3A92E646F63>

系统设计文档_样稿管理模块 V1.1_.doc

中国银行股份有限公司首次公开发行A股发行安排及初步询价公告

2016 年 荔 湾 区 财 政 核 定 支 出 汇 总 表 表 二 单 位 名 称 : 广 州 文 化 公 园 基 本 支 出 项 目 支 出 科 目 编 码 预 算 科 目 名 称 一 般 公 共 预 算 5, , , , ,

收 入 支 出 项 目 2016 年 预 算 项 目 2016 年 预 算 预 算 01 表 单 位 : 万 元 ( 保 留 两 位 小 数 ) 一 公 共 财 政 预 算 拨 款 一 人 员 经 费 一 般 财 力 人 员 支 出 成 品

书面申请

秦川发展第五届第三次

doc

航天信息 方案

2 根 据 广 东 省 交 通 建 设 工 程 施 工 现 场 开 工 前 考 核 评 表 或 根 据 广 东 省 交 通 建 设 工 程 施 工 现 场 实 施 过 程 考 核 评 表 的 和 内 容 进 行 核 查 ; 3 现 场 抽 查 具 有 代 表 性 的 各 岗 位 人 员 ( 从 事

Microsoft Word - bz185fj.doc

(Microsoft Word - NCRE\314\345\317\265\265\367\325\37313\324\27221\272\3051.doc)

Transcription:

C++ 用 户 指 南 Sun Studio 11 Sun Microsystems, Inc. www.sun.com 文 件 号 码 819-4815-10 2005 年 1 月, 修 订 版 A 请 将 有 关 本 文 档 的 意 见 和 建 议 提 交 至 : http://www.sun.com/hwdocs/feedback

版 权 所 有 2005 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. 保 留 所 有 权 利 美 国 政 府 权 利 - 商 业 用 途 政 府 用 户 应 遵 循 Sun Microsystems, Inc. 的 标 准 许 可 协 议, 以 及 FAR (Federal Acquisition Regulations, 即 联 邦 政 府 采 购 法 规 ) 的 适 用 条 款 及 其 补 充 条 款 必 须 依 据 许 可 证 条 款 使 用 本 发 行 版 可 能 包 含 由 第 三 方 开 发 的 内 容 本 产 品 的 某 些 部 分 可 能 是 从 Berkeley BSD 系 统 衍 生 出 来 的, 并 获 得 了 加 利 福 尼 亚 大 学 的 许 可 UNIX 是 X/Open Company, Ltd. 在 美 国 和 其 他 国 家 / 地 区 独 家 许 可 的 注 册 商 标 Sun Sun Microsystems Sun 徽 标 Java 和 JavaHelp 是 Sun Microsystems, Inc. 在 美 国 和 其 他 国 家 / 地 区 的 商 标 或 注 册 商 标 所 有 的 SPARC 商 标 的 使 用 均 已 获 得 许 可, 它 们 是 SPARC International, Inc. 在 美 国 和 其 他 国 家 / 地 区 的 商 标 或 注 册 商 标 标 有 SPARC 商 标 的 产 品 均 基 于 由 Sun Microsystems, Inc. 开 发 的 体 系 结 构 本 服 务 手 册 所 介 绍 的 产 品 以 及 所 包 含 的 信 息 受 美 国 出 口 控 制 法 制 约, 并 应 遵 守 其 他 国 家 / 地 区 的 进 出 口 法 律 严 禁 将 本 产 品 直 接 或 间 接 地 用 于 核 设 施 导 弹 生 化 武 器 或 海 上 核 设 施, 也 不 能 直 接 或 间 接 地 出 口 给 核 设 施 导 弹 生 化 武 器 或 海 上 核 设 施 的 最 终 用 户 严 禁 出 口 或 转 口 到 美 国 禁 运 的 国 家 / 地 区 以 及 美 国 禁 止 出 口 清 单 中 所 包 含 的 实 体, 包 括 但 不 限 于 被 禁 止 的 个 人 以 及 特 别 指 定 的 国 家 / 地 区 的 公 民 本 文 档 按 原 样 提 供, 对 于 所 有 明 示 或 默 示 的 条 件 陈 述 和 担 保, 包 括 对 适 销 性 适 用 性 或 非 侵 权 性 的 默 示 保 证, 均 不 承 担 任 何 责 任, 除 非 此 免 责 声 明 的 适 用 范 围 在 法 律 上 无 效

目 录 阅 读 本 书 之 前 xxvii 本 书 的 结 构 xxvii 印 刷 约 定 xxviii Shell 提 示 符 xxix 支 持 的 平 台 xxix 访 问 Sun Studio 软 件 和 手 册 页 xxix 访 问 Sun Studio 文 档 xxxii 访 问 相 关 的 Solaris 文 档 xxxiv 访 问 相 关 的 C++ 手 册 页 xxxiv 其 他 公 司 出 版 的 书 籍 xxxv 开 发 者 资 源 xxxv 联 系 Sun 技 术 支 持 xxxvi Sun 欢 迎 您 提 出 意 见 xxxvi 第 I 部 分 C++ 编 译 器 1. C++ 编 译 器 1 1 1.1 Sun Studio 10 C++ 5.8 编 译 器 的 新 特 性 和 新 功 能 1 1 1.2 Sun Studio 10 C++ 5.7 编 译 器 的 新 特 性 和 新 功 能 1 3 1.3 标 准 一 致 性 1 5 1.4 C++ 自 述 文 件 1 5 iii

1.5 手 册 页 1 6 1.6 C++ 实 用 程 序 1 6 1.7 本 地 语 言 支 持 1 6 2. 使 用 C++ 编 译 器 2 1 2.1 入 门 2 1 2.2 调 用 编 译 器 2 2 2.2.1 命 令 语 法 2 3 2.2.2 文 件 名 称 约 定 2 3 2.2.3 使 用 多 个 源 文 件 2 4 2.3 使 用 不 同 编 译 器 版 本 进 行 编 译 2 4 2.4 编 译 和 链 接 2 5 2.4.1 编 译 和 链 接 序 列 2 5 2.4.2 分 别 编 译 和 链 接 2 6 2.4.3 一 致 编 译 和 链 接 2 6 2.4.4 为 SPARC V9 编 译 2 7 2.4.5 诊 断 编 译 器 2 7 2.4.6 了 解 编 译 器 的 组 织 2 8 2.5 预 处 理 指 令 和 名 称 2 9 2.5.1 Pragma 2 9 2.5.2 具 有 可 变 数 量 参 数 的 宏 2 9 2.5.3 预 定 义 的 名 称 2 10 2.5.4 #error 2 10 2.6 内 存 要 求 2 10 2.6.1 交 换 空 间 大 小 2 10 2.6.2 增 加 交 换 空 间 2 11 2.6.3 虚 拟 内 存 的 控 制 2 11 2.6.4 内 存 要 求 2 12 2.7 简 化 命 令 2 12 iv C++ 用 户 指 南 2005 年 11 月

2.7.1 在 C Shell 中 使 用 别 名 2 12 2.7.2 使 用 CCFLAGS 来 指 定 编 译 选 项 2 13 2.7.3 使 用 make 2 13 3. 使 用 C++ 参 阅 编 译 器 选 项 3 1 3.1 语 法 3 1 3.2 通 用 指 南 3 1 3.3 按 功 能 汇 总 的 选 项 3 2 3.3.1 代 码 生 成 选 项 3 2 3.3.2 编 译 时 性 能 选 项 3 3 3.3.3 调 试 选 项 3 3 3.3.4 浮 点 选 项 3 4 3.3.5 语 言 选 项 3 5 3.3.6 库 选 项 3 5 3.3.7 许 可 证 选 项 3 6 3.3.8 废 弃 的 选 项 3 7 3.3.9 输 出 选 项 3 7 3.3.10 运 行 时 性 能 选 项 3 8 3.3.11 预 处 理 程 序 选 项 3 10 3.3.12 文 件 配 置 选 项 3 10 3.3.13 参 考 选 项 3 11 3.3.14 源 文 件 选 项 3 11 3.3.15 模 板 选 项 3 11 3.3.16 线 程 选 项 3 12 第 II 部 分 编 写 C++ 程 序 4. 语 言 扩 展 参 阅 4 1 4.1 链 接 程 序 作 用 域 4 1 4.2 线 程 局 部 存 储 4 2 目 录 v

4.3 用 限 制 较 少 的 虚 函 数 覆 盖 4 3 4.4 生 成 enum 类 型 和 变 量 的 向 前 声 明 4 3 4.5 使 用 不 完 整 enum 类 型 4 4 4.6 将 enum 名 称 作 为 作 用 域 限 定 符 4 4 4.7 使 用 匿 名 struct 声 明 4 5 4.8 传 递 匿 名 类 实 例 的 地 址 4 6 4.9 将 静 态 名 称 空 间 作 用 域 函 数 声 明 为 类 友 元 4 7 4.10 使 用 函 数 名 称 的 预 定 义 func 符 号 4 7 5. 程 序 组 织 5 1 5.1 头 文 件 5 1 5.1.1 可 适 应 语 言 的 头 文 件 5 1 5.1.2 幂 等 头 文 件 5 2 5.2 模 板 定 义 5 3 5.2.1 包 括 的 模 板 定 义 5 3 5.2.2 独 立 的 模 板 定 义 5 4 6. 创 建 和 使 用 模 板 6 1 6.1 函 数 模 板 6 1 6.1.1 函 数 模 板 声 明 6 1 6.1.2 函 数 模 板 定 义 6 2 6.1.3 函 数 模 板 用 法 6 2 6.2 类 模 板 6 2 6.2.1 类 模 板 声 明 6 3 6.2.2 类 模 板 定 义 6 3 6.2.3 类 模 板 成 员 定 义 6 4 6.2.4 类 模 板 的 用 法 6 5 6.3 模 板 实 例 化 6 5 6.3.1 隐 式 模 板 实 例 化 6 5 vi C++ 用 户 指 南 2005 年 11 月

6.3.2 显 式 模 板 实 例 化 6 6 6.4 模 板 组 合 6 7 6.5 默 认 模 板 参 数 6 8 6.6 模 板 专 门 化 6 8 6.6.1 模 板 专 门 化 声 明 6 8 6.6.2 模 板 专 门 化 定 义 6 9 6.6.3 模 板 专 门 化 使 用 和 实 例 化 6 9 6.6.4 部 分 专 门 化 6 9 6.7 模 板 问 题 部 分 6 10 6.7.1 非 本 地 名 称 解 析 和 实 例 化 6 10 6.7.2 作 为 模 板 参 数 的 本 地 类 型 6 11 6.7.3 模 板 函 数 的 友 元 声 明 6 12 6.7.4 在 模 板 定 义 内 使 用 限 定 名 称 6 14 6.7.5 嵌 套 模 板 名 称 6 14 6.7.6 引 用 静 态 变 量 和 静 态 函 数 6 15 6.7.7 在 同 一 目 录 中 使 用 模 板 生 成 多 个 程 序 6 15 7. 编 译 模 板 7 1 7.1 冗 余 编 译 7 1 7.2 系 统 信 息 库 管 理 7 1 7.2.1 生 成 的 实 例 7 1 7.2.2 整 个 类 实 例 化 7 2 7.2.3 编 译 时 实 例 化 7 2 7.2.4 模 板 实 例 的 放 置 和 链 接 7 2 7.3 外 部 实 例 7 3 7.3.1 静 态 实 例 7 4 7.3.2 全 局 实 例 7 4 7.3.3 显 式 实 例 7 5 7.3.4 半 显 式 实 例 7 5 目 录 vii

7.4 模 板 系 统 信 息 库 7 5 7.4.1 系 统 信 息 库 结 构 7 5 7.4.2 写 入 模 板 系 统 信 息 库 7 6 7.4.3 从 多 模 板 系 统 信 息 库 读 取 7 6 7.4.4 共 享 模 板 系 统 信 息 库 7 6 7.4.5 模 板 实 例 自 动 与 -instances=extern 一 致 7 6 7.5 模 板 定 义 搜 索 7 7 7.5.1 源 文 件 位 置 约 定 7 7 7.5.2 定 义 搜 索 路 径 7 7 7.5.3 诊 断 有 问 题 的 搜 索 7 7 8. 异 常 处 理 8 1 8.1 同 步 和 异 步 异 常 8 1 8.2 指 定 运 行 时 错 误 8 1 8.3 禁 用 异 常 8 2 8.4 使 用 运 行 时 函 数 和 预 定 义 的 异 常 8 3 8.5 将 异 常 与 信 号 和 Setjmp/Longjmp 混 合 8 4 8.6 生 成 具 有 异 常 的 共 享 库 8 4 9. 类 型 转 换 操 作 9 1 9.1 const_cast 9 2 9.2 reinterpret_cast 9 2 9.3 static_cast 9 3 9.4 动 态 类 型 转 换 9 4 9.4.1 将 分 层 结 构 向 上 类 型 转 换 9 4 9.4.2 类 型 转 换 到 void* 9 4 9.4.3 将 分 层 结 构 向 下 或 交 叉 类 型 转 换 9 4 10. 改 善 程 序 性 能 10 1 10.1 避 免 临 时 对 象 10 1 viii C++ 用 户 指 南 2005 年 11 月

10.2 使 用 内 联 函 数 10 2 10.3 使 用 默 认 运 算 符 10 2 10.4 使 用 值 类 10 3 10.4.1 选 择 直 接 传 递 类 10 3 10.4.2 在 不 同 的 处 理 器 上 直 接 传 递 类 10 4 10.5 缓 存 成 员 变 量 10 4 11. 生 成 多 线 程 程 序 11 1 11.1 生 成 多 线 程 程 序 11 1 11.1.1 表 明 多 线 程 编 译 11 2 11.1.2 与 线 程 和 信 号 一 起 使 用 C++ 支 持 库 11 2 11.2 在 多 线 程 程 序 中 使 用 异 常 11 2 11.2.1 线 程 取 消 11 2 11.3 在 线 程 之 间 共 享 C++ 标 准 库 对 象 11 3 11.4 在 多 线 程 环 境 中 使 用 传 统 iostream 11 5 11.4.1 多 线 程 安 全 的 iostream 库 的 组 织 11 6 11.4.2 对 iostream 库 进 行 接 口 更 改 11 11 11.4.3 全 局 和 静 态 数 据 11 14 11.4.4 序 列 执 行 11 14 11.4.5 对 象 锁 定 11 15 11.4.6 多 线 程 安 全 类 11 16 11.4.7 对 象 析 构 11 17 11.4.8 示 例 应 用 程 序 11 18 第 III 部 分 库 12. 使 用 库 12 1 12.1 C 库 12 1 12.2 C++ 编 译 器 提 供 的 库 12 1 12.2.1 C++ 库 描 述 12 2 目 录 ix

12.2.2 访 问 C++ 库 的 手 册 页 12 3 12.2.3 默 认 C++ 库 12 4 12.3 相 关 的 库 选 项 12 4 12.4 使 用 类 库 12 6 12.4.1 iostream 库 12 6 12.4.2 complex 库 12 7 12.4.3 链 接 C++ 库 12 9 12.5 静 态 链 接 标 准 库 12 9 12.6 使 用 共 享 库 12 10 12.7 替 换 C++ 标 准 库 12 11 12.7.1 可 以 替 换 的 内 容 12 12 12.7.2 不 可 以 替 换 的 内 容 12 12 12.7.3 安 装 替 换 库 12 12 12.7.4 使 用 替 换 库 12 12 12.7.5 标 准 头 文 件 实 现 12 13 13. 使 用 C++ 标 准 库 13 1 13.1 C++ 标 准 库 头 文 件 13 2 13.2 C++ 标 准 库 手 册 页 13 3 13.3 STLport 13 13 13.3.1 重 新 分 发 和 支 持 的 STLport 库 13 14 14. 使 用 传 统 iostream 库 14 1 14.1 预 定 义 的 iostream 14 1 14.2 iostream 交 互 的 基 本 结 构 14 2 14.3 使 用 传 统 iostream 库 14 3 14.3.1 使 用 iostream 进 行 输 出 14 3 14.3.2 使 用 iostream 进 行 输 入 14 6 14.3.3 定 义 自 己 的 提 取 运 算 符 14 7 x C++ 用 户 指 南 2005 年 11 月

14.3.4 使 用 char* 提 取 器 14 7 14.3.5 读 取 任 何 单 一 字 符 14 8 14.3.6 二 进 制 输 入 14 8 14.3.7 查 看 输 入 14 9 14.3.8 提 取 空 白 14 9 14.3.9 处 理 输 入 错 误 14 9 14.3.10 使 用 具 有 stdio 的 iostream 14 10 14.4 创 建 iostream 14 11 14.4.1 处 理 使 用 类 fstream 的 文 件 14 11 14.5 iostream 的 赋 值 14 14 14.6 格 式 控 制 14 14 14.7 控 制 器 14 15 14.7.1 使 用 无 格 式 控 制 器 14 16 14.7.2 参 数 化 控 制 器 14 17 14.8 Strstream: 数 组 的 iostream 14 18 14.9 Stdiobuf:stdio 文 件 的 iostream 14 19 14.10 Streambuf 14 19 14.10.1 和 Streambuf 一 起 使 用 14 19 14.10.2 使 用 Streambuf 14 20 14.11 iostream 手 册 页 14 20 14.12 iostream 术 语 14 22 15. 使 用 复 数 运 算 库 15 1 15.1 复 数 库 15 1 15.1.1 使 用 复 数 库 15 2 15.2 类 型 complex 15 2 15.2.1 类 complex 的 构 造 函 数 15 2 15.2.2 算 法 运 算 符 15 3 15.3 数 学 函 数 15 4 目 录 xi

15.4 错 误 处 理 15 5 15.5 输 入 和 输 出 15 6 15.6 混 合 模 式 运 算 15 7 15.7 效 率 15 7 15.8 复 数 手 册 页 15 8 16. 生 成 库 16 1 16.1 了 解 库 16 1 16.2 生 成 静 态 ( 归 档 ) 库 16 2 16.3 生 成 动 态 ( 共 享 ) 库 16 2 16.4 生 成 包 含 异 常 的 共 享 库 16 3 16.5 生 成 专 用 的 库 16 4 16.6 生 成 公 用 的 库 16 4 16.7 生 成 具 有 C API 的 库 16 4 16.8 使 用 dlopen 从 C 程 序 访 问 C++ 库 16 5 第 IV 部 分 附 录 A. C++ 编 译 器 选 项 A 1 A.1 选 项 信 息 的 结 构 A 2 A.2 选 项 参 考 A 2 A.2.1-386 A 2 A.2.2-486 A 3 A.2.3 -a A 3 A.2.4 -Bbinding A 3 A.2.5 -c A 4 A.2.6 -cg{89 92} A 5 A.2.7 -compat[={4 5}] A 5 A.2.8 +d A 7 A.2.9 -D[ ]name[=def] A 8 xii C++ 用 户 指 南 2005 年 11 月

A.2.10 -d{y n} A 9 A.2.11 -dalign A 10 A.2.12 -dryrun A 11 A.2.13 -E A 11 A.2.14 +e{0 1} A 12 A.2.15 -erroff[=t] A 12 A.2.16 -errtags[=a] A 13 A.2.17 -errwarn[=t] A 14 A.2.18 -fast A 15 A.2.19 -features=a[,a...] A 17 A.2.20 -filt[=filter[,filter...]] A 21 A.2.21 -flags A 24 A.2.22 -fnonstd A 24 A.2.23 -fns[={yes no}] A 24 A.2.24 -fprecision=p A 26 A.2.25 -fround=r A 27 A.2.26 -fsimple[=n] A 28 A.2.27 -fstore A 29 A.2.28 -ftrap=t[,t...] A 29 A.2.29 -G A 31 A.2.30 -g A 32 A.2.31 -g0 A 33 A.2.32 -H A 33 A.2.33 -h[ ]name A 33 A.2.34 -help A 34 A.2.35 -Ipathname A 34 A.2.36 -I- A 35 A.2.37 -i A 37 目 录 xiii

A.2.38 -inline A 37 A.2.39 -instances=a A 37 A.2.40 -instlib=filename A 38 A.2.41 -KPIC A 39 A.2.42 -KPIC A 40 A.2.43 -keeptmp A 40 A.2.44 -Lpath A 40 A.2.45 -llib A 40 A.2.46 -libmieee A 41 A.2.47 -libmil A 41 A.2.48 -library=l[,l...] A 41 A.2.49 -mc A 45 A.2.50 -migration A 45 A.2.51 -misalign A 46 A.2.52 -mr[,string] A 46 A.2.53 -mt A 47 A.2.54 -native A 47 A.2.55 -noex A 47 A.2.56 -nofstore A 48 A.2.57 -nolib A 48 A.2.58 -nolibmil A 48 A.2.59 -noqueue A 48 A.2.60 -norunpath A 48 A.2.61 -O A 49 A.2.62 -Olevel A 49 A.2.63 -o filename A 49 A.2.64 +p A 50 A.2.65 -P A 50 xiv C++ 用 户 指 南 2005 年 11 月

A.2.66 -p A 50 A.2.67 -pentium A 51 A.2.68 -pg A 51 A.2.69 -PIC A 51 A.2.70 -pic A 51 A.2.71 -pta A 51 A.2.72 -ptipath A 51 A.2.73 -pto A 52 A.2.74 -ptr A 52 A.2.75 -ptv A 52 A.2.76 -Qoption phase option[,option... A 52 A.2.77 -qoption phase option A 54 A.2.78 -qp A 54 A.2.79 -Qproduce sourcetype A 54 A.2.80 -qproduce sourcetype A 54 A.2.81 -Rpathname[:pathname... A 54 A.2.82 -readme A 55 A.2.83 -S A 55 A.2.84 -s A 55 A.2.85 -sb A 56 A.2.86 -sbfast A 56 A.2.87 -staticlib=l[,l ] A 56 A.2.88 -sync_stdio=[yes no] A 58 A.2.89 -temp=path A 59 A.2.90 -template=opt[,opt... A 59 A.2.91 -time A 61 A.2.92 -Uname A 61 A.2.93 -unroll=n A 62 目 录 xv

A.2.94 -V A 62 A.2.95 -v A 62 A.2.96 -vdelx A 62 A.2.97 -verbose=v[,v_] A 63 A.2.98 +w A 64 A.2.99 +w2 A 64 A.2.100 -w A 65 A.2.101 -Xm A 65 A.2.102 -xa A 65 A.2.103 -xalias_level[=n] A 66 A.2.104 -xar A 68 A.2.105 -xarch=isa A 69 A.2.106 -xautopar A 74 A.2.107 -xbinopt={prepare off} A 75 A.2.108 -xbuiltin[={%all %none}] A 76 A.2.109 -xcache=c A 77 A.2.110 -xcg[89 92] A 78 A.2.111 -xchar[=o] A 78 A.2.112 -xcheck[=i] A 80 A.2.113 -xchip=c A 80 A.2.114 -xcode=a A 82 A.2.115 -xcrossfile[=n] A 84 A.2.116 -xdebugformat=[stabs dwarf] A 85 A.2.117 -xdepend=[yes no] A 86 A.2.118 -xdumpmacros[=value[,value...]] A 86 A.2.119 -xe A 90 A.2.120 -xf[=v[,v...]] A 90 A.2.121 -xhelp=flags A 91 xvi C++ 用 户 指 南 2005 年 11 月

A.2.122 -xhelp=readme A 91 A.2.123 -xia A 92 A.2.124 -xinline[=func_spec[,func_spec...]] A 92 A.2.125 -xipo[={0 1 2}] A 94 A.2.126 -xjobs=n A 97 A.2.127 -xlang=language[,language] A 97 A.2.128 -xldscope={v} A 99 A.2.129 -xlibmieee A 100 A.2.130 -xlibmil A 100 A.2.131 -xlibmopt A 101 A.2.132 -xlic_lib=sunperf A 101 A.2.133 -xlicinfo A 101 A.2.134 -xlinkopt[=level] A 101 A.2.135 -xm A 103 A.2.136 -xm1 A 104 A.2.137 -xmerge A 104 A.2.138 -xmaxopt[=v] A 104 A.2.139 -xmemalign=ab A 104 A.2.140 -xmodel=[a] A 106 A.2.141 -xnativeconnect[=i] A 106 A.2.142 -xnolib A 108 A.2.143 -xnolibmil A 110 A.2.144 -xnolibmopt A 110 A.2.145 -xolevel A 110 A.2.146 -xopenmp[=i] A 113 A.2.147 -xpagesize=n A 114 A.2.148 -xpagesize_heap=n A 115 A.2.149 -xpagesize_stack=n A 116 目 录 xvii

A.2.150 -xpch=v A 116 A.2.151 -xpchstop=file A 119 A.2.152 -xpg A 120 A.2.153 -xport64[=(v)] A 120 A.2.154 -xprefetch[=a[,a...]] A 125 A.2.155 -xprefetch_auto_type=a A 127 A.2.156 -xprefetch_level[=i] A 127 A.2.157 -xprofile=p A 128 A.2.158 -xprofile_ircache[=path] A 130 A.2.159 -xprofile_pathmap A 131 A.2.160 -xregs=r[,r...] A 131 A.2.161 -xrestrict[=f] A 133 A.2.162 -xs A 135 A.2.163 -xsafe=mem A 135 A.2.164 -xsb A 135 A.2.165 -xsbfast A 135 A.2.166 -xspace A 136 A.2.167 -xtarget=t A 136 A.2.168 -xthreadvar[=o] A 143 A.2.169 -xtime A 144 A.2.170 -xtrigraphs[={yes no}] A 144 A.2.171 -xunroll=n A 145 A.2.172 -xustr={ascii_utf16_ushort no} A 146 A.2.173 -xvector[=a] A 147 A.2.174 -xvis[={yes no}] A 147 A.2.175 -xwe A 148 A.2.176 -Yc,path A 148 A.2.177 -z[ ]arg A 149 xviii C++ 用 户 指 南 2005 年 11 月

B. Pragma B 1 B.1 Pragma 形 式 B 1 B.1.1 将 函 数 作 为 Pragma 参 数 进 行 重 载 B 2 B.2 Pragma 引 用 B 2 B.2.1 #pragma align B 4 B.2.2 #pragma does_not_read_global_data B 4 B.2.3 #pragma does_not_return B 5 B.2.4 #pragma does_not_write_global_data B 5 B.2.5 #pragma dumpmacros B 6 B.2.6 #pragma end_dumpmacros B 7 B.2.7 #pragma fini B 7 B.2.8 #pragma hdrstop B 8 B.2.9 #pragma ident B 8 B.2.10 #pragma init B 8 B.2.11 #pragma no_side_effect B 9 B.2.12 #pragma opt B 9 B.2.13 #pragma pack(n) B 10 B.2.14 #pragma rarely_called B 11 B.2.15 #pragma returns_new_memory B 12 B.2.16 #pragma unknown_control_flow B 12 B.2.17 #pragma weak B 13 术 语 表 术 语 表 1 索 引 索 引 1 目 录 xix

xx C++ 用 户 指 南 2005 年 11 月

表 表 P-1 字 体 约 定 xxviii 表 P-2 代 码 约 定 xxviii 表 2-1 C++ 编 译 器 识 别 的 文 件 名 称 后 缀 3 表 2-2 C++ 编 译 系 统 的 组 件 8 表 3-1 选 项 语 法 格 式 示 例 1 表 3-2 代 码 生 成 选 项 2 表 3-3 编 译 时 性 能 选 项 3 表 3-4 调 试 选 项 3 表 3-5 浮 点 选 项 4 表 3-6 语 言 选 项 5 表 3-7 库 选 项 5 表 3-8 许 可 证 选 项 6 表 3-9 废 弃 的 选 项 7 表 3-10 输 出 选 项 7 表 3-11 运 行 时 性 能 选 项 8 表 3-12 预 处 理 程 序 选 项 10 表 3-13 文 件 配 置 选 项 10 表 3-14 参 考 选 项 11 表 3-15 源 文 件 选 项 11 表 3-16 模 板 选 项 11 xxi

表 3-17 线 程 选 项 12 表 4-1 链 接 程 序 作 用 域 声 明 说 明 符 2 表 10-1 在 不 同 架 构 上 结 构 和 联 合 的 传 递 4 表 11-1 iostream 初 始 核 心 类 6 表 11-2 多 线 程 安 全 的 可 重 入 公 共 函 数 7 表 12-1 C++ 编 译 器 附 带 的 库 2 表 12-2 链 接 C++ 库 的 编 译 器 选 项 9 表 12-3 头 文 件 搜 索 示 例 14 表 13-1 C++ 标 准 库 头 文 件 2 表 13-2 C++ 标 准 库 手 册 页 3 表 14-1 iostream 例 程 头 文 件 3 表 14-2 iostream 预 定 义 的 控 制 器 15 表 14-3 iostream 手 册 页 概 述 21 表 14-4 iostream 术 语 22 表 15-1 复 数 运 算 库 函 数 4 表 15-2 复 数 数 学 函 数 和 三 角 函 数 4 表 15-3 复 数 运 算 库 函 数 的 默 认 错 误 处 理 6 表 15-4 类 型 complex 的 手 册 页 8 表 A-1 选 项 语 法 格 式 示 例 1 表 A-2 选 项 子 节 2 表 A-3 预 定 义 的 宏 8 表 A-4 -erroff 值 13 表 A-5 -errwarn 值 14 表 A-6 -fast 扩 展 15 表 A-7 兼 容 模 式 和 标 准 模 式 的 -features 值 18 表 A-8 仅 用 于 标 准 模 式 的 -features 值 19 表 A-9 仅 用 于 兼 容 模 式 的 -features 值 20 表 A-10 -filt 值 22 表 A-11 -fns 值 25 表 A-12 -fprecision 值 26 xxii C++ 用 户 指 南 2005 年 11 月

表 A-13 -fround 值 27 表 A-14 -fsimple 值 28 表 A-15 -ftrap 值 30 表 A-16 -instances 值 38 表 A-17 用 于 兼 容 模 式 的 -library 值 42 表 A-18 用 于 标 准 模 式 的 -library 值 42 表 A-19 -Qoption 值 53 表 A-20 -Qproduce 值 54 表 A-21 -staticlib 值 56 表 A-22 -template 值 60 表 A-23 -verbose 值 63 表 A-24 SPARC 平 台 的 -xarch 值 69 表 A-25 x86 平 台 的 -xarch 值 72 表 A-26 -xcache 的 值 77 表 A-27 -xchar 值 79 表 A-28 -xcheck 值 80 表 A-29 -xchip 值 81 表 A-30 -xcode 值 82 表 A-31 -xcrossfile 值 84 表 A-32 -xdebugformat 标 志 85 表 A-33 -xdumpmacros 值 86 表 A-34 -xf 值 91 表 A-35 -xinline 值 93 表 A-36 -xipo 值 95 表 A-37 -xldscope 值 99 表 A-38 -xlinkopt 值 102 表 A-39 -xmemalign 的 对 齐 和 行 为 值 105 表 A-40 -xmemalign 示 例 105 表 A-41 -xmodel 标 志 106 表 A-42 -xnativeconnect 值 107 表 xxiii

表 A-43 -xopenmp 值 113 表 A-44 -xport64 值 121 表 A-45 -xprefetch 值 125 表 A-46 -xprefecth_level 值 128 表 A-47 -xregs 值 132 表 A-48 -xrestrict 值 133 表 A-49 SPARC 平 台 的 -xtarget 值 136 表 A-50 -xtarget 的 SPARC 平 台 扩 展 137 表 A-51 x86 架 构 上 的 -xtarget 扩 展 141 表 A-52 -xthreadvar 的 值 143 表 A-53 -xtrigraphs 值 144 表 A-54 -xvector 标 志 147 表 A-55 -Y 标 志 148 表 B-1 平 台 上 最 严 格 的 对 齐 10 表 B-2 存 储 大 小 和 默 认 对 齐 字 节 数 11 xxiv C++ 用 户 指 南 2005 年 11 月

代 码 样 例 代 码 样 例 6-1 本 地 类 型 用 作 模 板 参 数 问 题 的 示 例 11 代 码 样 例 6-2 友 元 声 明 问 题 的 示 例 12 代 码 样 例 11-1 检 查 错 误 状 态 8 代 码 样 例 11-2 调 用 gcount 9 代 码 样 例 11-3 用 户 定 义 的 I/O 操 作 9 代 码 样 例 11-4 禁 用 多 线 程 安 全 10 代 码 样 例 11-5 切 换 到 多 线 程 不 安 全 10 代 码 样 例 11-6 在 多 线 程 不 安 全 的 对 象 中 使 用 同 步 11 代 码 样 例 11-7 新 增 类 11 代 码 样 例 11-8 新 增 类 的 分 层 结 构 12 代 码 样 例 11-9 新 增 函 数 12 代 码 样 例 11-10 使 用 锁 定 操 作 的 示 例 15 代 码 样 例 11-11 令 I/O 操 作 和 错 误 检 查 独 立 化 16 代 码 样 例 11-12 销 毁 共 享 对 象 17 代 码 样 例 11-13 以 多 线 程 安 全 方 式 使 用 iostream 对 象 18 代 码 样 例 14-1 string 提 取 运 算 符 7 代 码 样 例 A-1 预 处 理 程 序 示 例 程 序 foo.cc 11 代 码 样 例 A-2 使 用 -E 选 项 的 foo.cc 的 预 处 理 程 序 输 出 11 代 码 样 例 A-3 带 两 个 指 针 的 循 环 134 xxv

xxvi C++ 用 户 指 南 2005 年 11 月

阅 读 本 书 之 前 本 手 册 指 导 您 使 用 Sun Studio 11 的 C++ 编 译 器, 并 提 供 了 有 关 命 令 行 编 译 器 选 项 的 详 细 信 息 本 手 册 适 用 于 具 有 C++ 使 用 经 验 并 对 Solaris 操 作 系 统 和 UNIX 命 令 有 一 定 了 解 的 编 程 人 员 本 书 的 结 构 本 手 册 包 含 以 下 主 题 : C++ 编 译 器 第 1 章 提 供 了 有 关 编 译 的 介 绍 性 信 息, 诸 如 标 准 一 致 性 和 新 特 性 第 2 章 说 明 了 如 何 使 用 编 译 器 第 3 章 介 绍 了 如 何 使 用 编 译 器 的 命 令 行 选 项 编 写 C++ 程 序 第 4 章 介 绍 了 如 何 编 译 通 常 可 被 其 他 C++ 编 译 器 接 受 的 非 标 准 代 码 第 5 章 建 议 设 置 和 组 织 头 文 件 和 模 板 定 义 第 6 章 介 绍 了 如 何 创 建 和 使 用 模 板 第 7 章 说 明 了 用 于 编 译 模 板 的 各 种 选 项 第 8 章 介 绍 了 异 常 处 理, 类 型 转 换 操 作 的 信 息 则 位 于 第 9 章 第 10 章 介 绍 了 显 著 影 响 C++ 编 译 器 的 性 能 技 术 第 11 章 则 提 供 了 生 成 多 线 程 程 序 的 信 息 库 第 12 章 说 明 了 如 何 使 用 编 译 器 提 供 的 库 第 13 章 介 绍 了 C++ 标 准 库 第 14 章 介 绍 了 用 于 兼 容 模 式 的 传 统 iostream 库 第 15 章 介 绍 了 用 于 兼 容 模 式 的 复 数 运 算 库 第 16 章 则 提 供 了 关 于 生 成 库 的 信 息 附 录 附 录 A 按 字 母 顺 序 列 出 了 一 整 套 C++ 编 译 器 选 项 ; 附 录 B 列 出 了 C++ 编 译 器 pragma xxvii

印 刷 约 定 表 P-1 字 体 约 定 字 体 * AaBbCc123 AaBbCc123 AaBbCc123 含 义 命 令 文 件 和 目 录 的 名 称 ; 计 算 机 屏 幕 输 出 用 户 键 入 的 内 容, 与 计 算 机 屏 幕 输 出 的 显 示 不 同 保 留 未 译 的 新 词 或 术 语 以 及 要 强 调 的 词 要 使 用 实 名 或 值 替 换 的 命 令 行 变 量 示 例 编 辑.login 文 件 使 用 ls -a 列 出 所 有 文 件 % You have mail. % su Password: 这 些 称 为 class 选 项 要 删 除 文 件, 请 键 入 rm filename 新 词 术 语 强 调 新 词 或 术 语 以 及 要 强 调 的 词 您 必 须 成 为 超 级 用 户 才 能 执 行 此 操 作 书 名 书 名 阅 读 用 户 指 南 的 第 6 章 * 浏 览 器 的 设 置 可 能 会 与 这 些 设 置 不 同 表 P-2 代 码 约 定 代 码 符 号 含 义 表 示 法 代 码 示 例 [ ] 方 括 号 中 包 含 可 选 参 数 O[n] -O4, -O { } 花 括 号 中 包 含 所 需 选 项 的 选 项 集 合 分 隔 变 量 的 或 - 符 号, 只 能 选 择 其 一 : 与 逗 号 一 样, 分 号 有 时 可 用 于 分 隔 参 数 d{y n} B{dynamic static} Rdir[:dir] -dy -Bstatic -R/local/libs:/U/a 省 略 号 表 示 一 系 列 的 省 略 -xinline=f1[, fn] -xinline=alpha,dos xxviii C++ 用 户 指 南 2005 年 11 月

Shell 提 示 符 Shell 提 示 符 C shell machine-name% C shell 超 级 用 户 machine-name# Bourne shell Korn shell 和 GNU Bourne-Again shell $ Bourne shell Korn shell 和 GNU Bourne-Again shell # 的 超 级 用 户 支 持 的 平 台 此 Sun Studio 发 行 版 本 支 持 使 用 SPARC 和 x86 系 列 处 理 器 体 系 结 构 (UltraSPARC SPARC64 AMD64 Pentium 和 Xeon EM64T) 的 系 统 通 过 访 问 http://www.sun.com/bigadmin/hcl 中 的 硬 件 兼 容 性 列 表, 可 以 了 解 您 在 使 用 的 Solaris 操 作 系 统 版 本 的 支 持 系 统 这 些 文 档 列 出 了 实 现 各 个 平 台 类 型 的 所 有 差 别 在 本 文 档 中, 这 些 与 x86 有 关 的 术 语 具 有 以 下 含 义 : x86 是 指 较 大 的 64 位 和 32 位 x86 兼 容 产 品 系 列 x64 表 示 有 关 AMD64 或 EM64T 系 统 的 特 定 64 位 信 息 32 位 x86 表 示 有 关 基 于 x86 的 系 统 的 特 定 32 位 信 息 有 关 所 支 持 的 系 统, 请 参 见 硬 件 兼 容 性 列 表 访 问 Sun Studio 软 件 和 手 册 页 Sun Studio 软 件 及 其 手 册 页 未 安 装 到 /usr/bin/ 和 /usr/share/man 标 准 目 录 中 要 访 问 软 件, 必 须 正 确 设 置 PATH 环 境 变 量 ( 请 参 见 第 xxx 页 的 访 问 软 件 ) 要 访 问 手 册 页, 必 须 正 确 设 置 MANPATH 环 境 变 量 ( 请 参 见 第 xxx 页 的 访 问 手 册 页 ) 阅 读 本 书 之 前 xxix

有 关 PATH 变 量 的 详 细 信 息, 请 参 见 csh(1) sh(1) ksh(1) 和 bash(1) 手 册 页 有 关 MANPATH 变 量 的 详 细 信 息, 请 参 见 man(1) 手 册 页 有 关 设 置 PATH 变 量 和 MANPATH 变 量 以 访 问 此 发 行 版 本 的 详 细 信 息, 请 参 见 安 装 指 南 或 询 问 系 统 管 理 员 注 本 节 中 的 信 息 假 设 Sun Studio 软 件 安 装 在 Solaris 平 台 上 的 /opt 目 录 中 和 Linux 平 台 上 的 /opt/sun 目 录 中 如 果 未 将 软 件 安 装 在 默 认 目 录 中, 请 询 问 系 统 管 理 员 以 获 取 系 统 中 的 相 应 路 径 访 问 软 件 使 用 以 下 步 骤 来 决 定 是 否 需 要 更 改 PATH 变 量 以 访 问 该 软 件 决 定 是 否 需 要 设 置 PATH 环 境 变 量 1. 通 过 在 命 令 提 示 符 后 键 入 以 下 内 容 以 显 示 PATH 变 量 的 当 前 值 % echo $PATH 2. 在 Solaris 平 台 上, 查 看 输 出 中 是 否 包 含 有 /opt/sunwspro/bin 的 路 径 字 符 串 在 Linux 平 台 上, 查 看 输 出 中 是 否 包 含 有 /opt/sun/sunstudio11/bin 的 路 径 字 符 串 如 果 找 到 该 路 径, 则 说 明 已 设 置 了 访 问 该 软 件 的 PATH 变 量 如 果 没 有 找 到 该 路 径, 则 按 照 下 一 步 的 说 明 来 设 置 PATH 环 境 变 量 设 置 PATH 环 境 变 量 以 实 现 对 软 件 的 访 问 在 Solaris 平 台 上, 将 以 下 路 径 添 加 到 PATH 环 境 变 量 中 如 果 以 前 安 装 了 Forte Developer 软 件 Sun ONE Studio 软 件, 或 其 他 发 行 版 本 的 Sun Studio 软 件, 则 将 以 下 路 径 添 加 到 这 些 安 装 路 径 之 前 /opt/sunwspro/bin 在 Linux 平 台 上, 将 以 下 路 径 添 加 到 PATH 环 境 变 量 中 /opt/sun/sunstudio11/bin 访 问 手 册 页 使 用 以 下 步 骤 决 定 是 否 需 要 更 改 MANPATH 变 量 以 访 问 手 册 页 xxx C++ 用 户 指 南 2005 年 11 月

决 定 是 否 需 要 设 置 MANPATH 环 境 变 量 1. 通 过 在 命 令 提 示 符 后 键 入 以 下 内 容 以 请 求 dbx 手 册 页 % man dbx 2. 请 查 看 输 出 ( 如 果 有 ) 如 果 找 不 到 dbx(1) 手 册 页 或 者 显 示 的 手 册 页 不 是 软 件 当 前 版 本 的 手 册 页, 请 按 照 下 一 步 的 说 明 来 设 置 MANPATH 环 境 变 量 设 置 MANPATH 环 境 变 量 以 实 现 对 手 册 页 的 访 问 在 Solaris 平 台 上, 将 以 下 路 径 添 加 到 MANPATH 环 境 变 量 中 /opt/sunwspro/man 在 Linux 平 台 上, 将 以 下 路 径 添 加 到 MANPATH 环 境 变 量 中 /opt/sun/sunstudio11/man 访 问 集 成 开 发 环 境 Sun Studio 集 成 开 发 环 境 (integrated development environment, IDE) 提 供 了 创 建 编 辑 生 成 调 试 C C++ 或 Fortran 应 用 程 序 并 分 析 其 性 能 的 模 块 启 动 IDE 的 命 令 是 sunstudio 有 关 该 命 令 的 详 细 信 息, 请 参 见 sunstudio(1) 手 册 页 IDE 是 否 可 以 正 确 操 作 取 决 于 IDE 能 否 找 到 核 心 平 台 sunstudio 命 令 查 找 两 个 位 置 的 核 心 平 台 : 该 命 令 首 先 查 找 Solaris 平 台 上 的 默 认 安 装 目 录 /opt/netbeans/3.5v11 和 Linux 平 台 上 的 默 认 安 装 目 录 /opt/sun/netbeans/3.5v11 如 果 该 命 令 在 默 认 目 录 找 不 到 核 心 平 台, 则 它 会 假 设 包 含 IDE 的 目 录 和 包 含 核 心 平 台 的 目 录 均 安 装 在 同 一 位 置 上 例 如, 在 Solaris 平 台 上, 如 果 包 含 IDE 的 目 录 的 路 径 是 /foo/sunwspro, 则 该 命 令 会 在 /foo/netbeans/3.5v11 中 查 找 核 心 平 台 在 Linux 平 台 上, 如 果 包 含 IDE 的 目 录 的 路 径 是 /foo/sunstudio11, 则 该 命 令 会 在 /foo/netbeans/3.5v11 中 查 找 核 心 平 台 如 果 核 心 平 台 未 安 装 在 sunstudio 命 令 查 找 它 的 任 一 位 置 上, 则 客 户 端 系 统 上 的 每 个 用 户 必 须 将 环 境 变 量 SPRO_NETBEANS_HOME 设 置 为 安 装 核 心 平 台 的 位 置 (/installation_directory/netbeans/3.5v11) 阅 读 本 书 之 前 xxxi

在 Solaris 平 台 上,IDE 的 每 个 用 户 还 必 须 将 /installation_directory/sunwspro/bin 添 加 到 其 他 任 何 Forte Developer 软 件 Sun ONE Studio 软 件 或 Sun Studio 软 件 发 行 版 本 路 径 前 面 的 $PATH 中 在 Linux 平 台 上, IDE 的 每 个 用 户 还 必 须 将 /installation_directory/sunstudio11/bin 添 加 到 其 他 任 何 发 行 版 本 的 Sun Studio 软 件 路 径 前 面 的 $PATH 中 路 径 /installation_directory/netbeans/3.5v11/bin 不 能 添 加 到 用 户 的 $PATH 中 访 问 Sun Studio 文 档 您 可 以 访 问 下 列 位 置 的 文 档 : 可 以 通 过 随 软 件 一 起 安 装 在 本 地 系 统 或 网 络 上 的 文 档 索 引 获 取 文 档, 位 置 为 Solaris 平 台 上 的 file:/opt/sunwspro/docs/zh/index.html 和 Linux 平 台 上 的 file:/opt/sun/sunstudio11/docs/zh/index.html 如 果 未 将 软 件 安 装 在 Solaris 平 台 上 的 /opt 目 录 中 或 Linux 平 台 上 的 /opt/sun 目 录 中, 请 询 问 系 统 管 理 员 以 获 取 系 统 中 的 相 应 路 径 大 多 数 的 手 册 都 可 以 从 docs.sun.com sm Web 站 点 获 取 以 下 书 目 只 能 从 Solaris 平 台 上 安 装 的 软 件 中 找 到 : 标 准 C++ 库 类 参 考 标 准 C++ 库 用 户 指 南 Tools.h++ 类 库 参 考 Tools.h++ 用 户 指 南 适 用 于 Solaris 平 台 和 Linux 平 台 的 发 行 说 明 可 以 通 过 docs.sun.com Web 站 点 获 取 在 IDE 中 通 过 帮 助 菜 单 以 及 许 多 窗 口 和 对 话 框 上 的 帮 助 按 钮, 可 以 访 问 IDE 所 有 组 件 的 联 机 帮 助 您 可 以 通 过 Internet 访 问 docs.sun.com Web 站 点 (http://docs.sun.com) 以 阅 读 打 印 和 购 买 Sun Microsystems 的 各 种 手 册 如 果 找 不 到 手 册, 请 参 见 和 软 件 一 起 安 装 在 本 地 系 统 或 网 络 中 的 文 档 索 引 注 Sun 对 本 文 档 中 提 到 的 第 三 方 Web 站 点 的 可 用 性 不 承 担 任 何 责 任 对 于 此 类 站 点 或 资 源 中 的 ( 或 通 过 它 们 获 得 的 ) 任 何 内 容 广 告 产 品 或 其 他 资 料,Sun 并 不 表 示 认 可, 也 不 承 担 任 何 责 任 对 于 因 使 用 或 依 靠 此 类 站 点 或 资 源 中 的 ( 或 通 过 它 们 获 得 的 ) 任 何 内 容 产 品 或 服 务 而 造 成 的 或 连 带 产 生 的 实 际 或 名 义 损 坏 或 损 失,Sun 概 不 负 责, 也 不 承 担 任 何 责 任 xxxii C++ 用 户 指 南 2005 年 11 月

使 用 易 读 格 式 的 文 档 该 文 档 以 易 读 格 式 提 供, 以 方 便 残 障 用 户 使 用 辅 助 技 术 进 行 阅 读 您 还 可 以 按 照 下 表 所 述, 找 到 文 档 的 易 读 版 本 如 果 未 将 软 件 安 装 在 /opt 目 录 中, 请 询 问 系 统 管 理 员 以 获 取 系 统 中 的 相 应 路 径 文 档 类 型 手 册 ( 第 三 方 手 册 除 外 ) 第 三 方 手 册 : 标 准 C++ 库 类 参 考 标 准 C++ 库 用 户 指 南 Tools.h++ 类 库 参 考 Tools.h++ 用 户 指 南 自 述 文 件 手 册 页 联 机 帮 助 发 行 说 明 易 读 版 本 的 格 式 和 位 置 HTML, 位 于 http://docs.sun.com HTML, 位 于 Solaris 平 台 上 所 安 装 软 件 中 的 文 档 索 引 file:/opt/sunwspro/docs/zh/index.html HTML, 位 于 Sun Developer Network 门 户 网 站 http://developers.sun.com/prodtech/cc/documentation/ HTML, 位 于 安 装 的 软 件 上 的 文 档 索 引, 位 置 为 Solaris 平 台 上 的 file:/opt/sunwspro/docs/zh/index.html 和 Linux 平 台 上 的 file:/opt/sun/sunstudio11/docs/zh/index.html HTML, 可 通 过 IDE 中 的 帮 助 菜 单 和 帮 助 按 钮 访 问 HTML, 位 于 http://docs.sun.com 相 关 文 档 对 于 Solaris 平 台, 下 表 描 述 的 相 关 文 档 可 以 在 /opt/sunwspro/docs/zh/index.html 和 http://docs.sun.com 上 获 取 如 果 未 将 软 件 安 装 在 /opt 目 录 中, 请 询 问 系 统 管 理 员 以 获 取 系 统 中 的 相 应 路 径 文 档 标 题 描 述 对 于 Linux 平 台, 下 表 描 述 的 相 关 文 档 可 以 在 file:/opt/sun/sunstudio11/docs/zh/index.html 和 http://docs.sun.com 上 获 取 如 果 未 将 软 件 安 装 在 /opt/sun 目 录 中, 请 询 问 系 统 管 理 员 以 获 取 系 统 中 的 相 应 路 径 文 档 标 题 描 述 阅 读 本 书 之 前 xxxiii

访 问 相 关 的 Solaris 文 档 下 表 描 述 了 可 从 docs.sun.com Web 站 点 上 获 取 的 相 关 文 档 文 档 集 合 文 档 标 题 描 述 Solaris 参 考 手 册 集 合 请 参 见 手 册 页 部 分 的 标 题 提 供 有 关 Solaris 操 作 系 统 的 信 息 Solaris 软 件 开 发 者 集 合 链 接 程 序 和 库 指 南 介 绍 了 Solaris 链 接 编 辑 器 和 运 行 时 链 接 程 序 的 操 作 访 问 相 关 的 C++ 手 册 页 本 手 册 提 供 了 可 用 于 C++ 库 的 手 册 页 列 表 下 表 列 出 了 与 C++ 相 关 的 其 他 手 册 页 标 题 c++filt dem fbe fpversion gprof inline lex rpcgen sigfpe stdarg varargs 版 本 yacc 描 述 按 顺 序 复 制 每 个 文 件 名, 并 在 解 码 类 似 C++ 还 原 名 称 的 符 号 之 后 将 文 件 名 写 入 标 准 输 出 还 原 指 定 的 一 个 或 多 个 C++ 名 称 从 汇 编 语 言 源 文 件 创 建 对 象 文 件 输 出 系 统 CPU 和 FPU 的 相 关 信 息 生 成 程 序 的 可 执 行 性 能 分 析 数 据 扩 展 汇 编 程 序 的 内 联 过 程 调 用 生 成 词 法 分 析 程 序 生 成 C/C++ 代 码 以 实 现 RPC 协 议 允 许 对 指 定 SIGFPE 代 码 进 行 信 号 处 理 处 理 变 量 参 数 列 表 处 理 变 量 参 数 列 表 显 示 对 象 文 件 或 二 进 制 文 件 的 版 本 标 识 将 上 下 文 无 关 的 语 法 转 换 成 一 组 表, 用 于 执 行 LALR(1) 分 析 算 法 的 简 单 自 动 化 xxxiv C++ 用 户 指 南 2005 年 11 月

其 他 公 司 出 版 的 书 籍 以 下 是 部 分 C++ 语 言 书 籍 的 列 表 : The C++ Programming Language 3rd edition, Bjarne Stroustrup 所 著 (Addison- Wesley, 1997) The C++ Standard Library, Nicolai Josuttis 所 著 (Addison-Wesley, 1999) Generic Programming and the STL, Matthew Austern 所 著 (Addison-Wesley, 1999) Standard C++ IOStreams and Locales,Angelika Langer 和 Klaus Kreft 所 著 (Addison- Wesley, 2000) Thinking in C++, Volume 1, Second Edition, Bruce Eckel 所 著 (Prentice Hall, 2000) The Annotated C++ Reference Manual, Margaret A. Ellis 和 Bjarne Stroustrup 所 著 (Addison-Wesley, 1990) Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma Richard Helm Ralph Johnson 和 John Vlissides 所 著 (Addison-Wesley, 1995) C++ Primer, Third Edition,Stanley B. Lippman 和 Josee Lajoie 所 著 (Addison-Wesley, 1998) Effective C++-50 Ways to Improve Your Programs and Designs Second Edition,Scott Meyers 所 著 (Addison-Wesley, 1998) More Effective C++ - 35 Ways to Improve Your Programs and Designs,Scott Meyers 所 著 (Addison-Wesley, 1996) 开 发 者 资 源 访 问 Sun Developer Network Sun Studio 门 户 网 站 http://developers.sun.com/prodtech/cc 以 查 找 以 下 经 常 更 新 的 资 源 : 关 于 编 程 技 术 和 最 佳 实 例 的 文 章 有 关 编 程 小 技 巧 的 知 识 库 软 件 的 文 档, 以 及 随 软 件 一 同 安 装 的 文 档 的 更 正 信 息 有 关 支 持 级 别 的 信 息 用 户 论 坛 可 下 载 的 代 码 样 例 阅 读 本 书 之 前 xxxv

新 技 术 预 览 Sun Studio 门 户 网 站 是 Sun Developer Network 网 站 http://developers.sun.com 上 的 很 多 额 外 开 发 者 资 源 之 一 联 系 Sun 技 术 支 持 如 果 您 遇 到 通 过 本 文 档 无 法 解 决 的 技 术 问 题, 请 访 问 以 下 网 址 : http://www.sun.com/service/contacting Sun 欢 迎 您 提 出 意 见 Sun 致 力 于 提 高 其 文 档 的 质 量, 并 十 分 乐 意 收 到 您 的 意 见 和 建 议 您 可 以 通 过 以 下 网 址 提 交 您 的 意 见 和 建 议 : http://www.sun.com/hwdocs/feedback 请 在 电 子 邮 件 的 主 题 行 中 注 明 文 档 的 文 件 号 码 例 如, 本 文 档 的 文 件 号 码 是 819-4815-10 xxxvi C++ 用 户 指 南 2005 年 11 月

第 I 部 分 C++ 编 译 器

第 1 章 C++ 编 译 器 本 章 提 供 有 关 以 下 内 容 的 信 息 : 第 1-1 页 Sun Studio 10 C++ 5.8 编 译 器 的 新 特 性 和 新 功 能 第 1-3 页 Sun Studio 10 C++ 5.7 编 译 器 的 新 特 性 和 新 功 能 第 1-5 页 C++ 自 述 文 件 第 1-6 页 手 册 页 第 1-6 页 C++ 实 用 程 序 第 1-6 页 本 地 语 言 支 持 1.1 Sun Studio 10 C++ 5.8 编 译 器 的 新 特 性 和 新 功 能 本 节 简 要 介 绍 在 Sun Studio 10 C++ 5.8 编 译 器 发 行 版 本 中 引 入 的 C 编 译 器 的 新 特 性 和 新 功 能 有 关 详 细 的 说 明, 请 参 见 每 项 的 交 叉 引 用 用 于 x86 开 发 的 -xarch 新 标 志 -xarch 选 项 目 前 支 持 将 以 下 新 标 志 用 于 x86 平 台 开 发 :amd64a pentium_proa ssea sse2a 请 参 见 第 A-69 页 的 第 A.2.105 节 "-xarch=isa" 支 持 x86 -xpagesize 选 项 目 前 为 x86 平 台 和 SPARC 启 用 了 -xpagesize -xpagesize_heap -xpagesize_stack 选 项 请 参 见 第 A-114 页 的 第 A.2.147 节 "-xpagesize=n" 用 于 指 定 x86 内 存 模 型 的 -xmodel 新 选 项 通 过 使 用 -xmodel 新 选 项, 可 以 在 64 位 AMD 体 系 结 构 上 指 定 内 核 小 型 或 中 型 内 存 模 型 如 果 全 局 变 量 和 静 态 变 量 的 大 小 超 过 了 2 千 兆 字 节, 请 指 定 -xmodel=medium 否 则, 请 使 用 -xmodel=small 默 认 设 置 有 关 详 细 信 息, 请 参 见 第 A-106 页 的 第 A.2.140 节 "-xmodel=[a]" 1-1

支 持 SSE/SSE2 整 型 介 质 内 部 函 数 本 发 行 版 本 支 持 SSE2 128 位 XMM 寄 存 器 整 型 介 质 指 令 的 内 部 函 数 在 源 代 码 中 包 含 sunmedia_intrin.h 头 文 件, 并 指 定 -xbuiltin 选 项 以 利 用 这 些 函 数 再 者, 这 些 内 部 函 数 需 要 SSE2 支 持, 因 此, 请 指 定 -xarch=sse2 -xarch=amd64 或 -xtarget=opteron 等 选 项 实 质 上, 编 译 器 为 这 些 内 部 函 数 生 成 内 联 代 码 这 比 通 过 汇 编 语 言 处 理 这 些 指 令 简 单 一 些, 并 且 编 译 器 可 以 对 其 进 行 优 化 有 关 内 部 函 数 的 详 细 信 息 头 文 件 中 包 含 的 函 数 原 型 以 及 这 些 函 数 使 用 的 数 据 类 型 的 说 明, 请 参 见 用 于 Linux 系 统 的 Intel(R) C++ 编 译 器 手 册 中 的 Intel C++ 内 部 函 数 参 考 一 节 用 于 x86 SSE2 平 台 的 -xvector 新 标 志 利 用 -xvector 选 项, 可 以 自 动 生 成 向 量 库 函 数 调 用 和 / 或 生 成 SIMD (Single Instruction Multiple Data, 单 指 令 多 数 据 ) 指 令 有 关 详 细 信 息, 请 参 见 第 A-147 页 的 第 A.2.173 节 "-xvector[=a]" 用 于 SPARC 的 二 进 制 文 件 优 化 器 通 过 -xbinopt 新 选 项, 编 译 器 可 以 准 备 由 binopt(1) 二 进 制 文 件 优 化 器 进 一 步 优 化 的 二 进 制 文 件 有 关 详 细 信 息, 请 参 见 第 A-75 页 的 第 A.2.107 节 "-xbinopt={prepare off}" 从 函 数 模 板 调 用 相 关 静 态 函 数 C++ 标 准 规 定, 取 决 于 模 板 参 数 的 函 数 调 用 只 能 引 用 具 有 外 部 链 接 的 可 见 函 数 声 明 如 果 应 用 程 序 代 码 取 决 于 忽 略 此 规 则 并 从 函 数 模 板 中 调 用 相 关 静 态 函 数 的 编 译 器, 则 指 定 -features=[no%]tmplrefstatic 有 关 详 细 信 息 和 示 例, 请 参 见 第 A-17 页 的 第 A.2.19 节 "-features=a[,a...]" SPARC -xtarget 和 -xchip 的 新 值 -xtarget 的 新 标 志 ultra3iplus ultra4plus 和 ultrat1 以 及 -xchip 的 新 标 志 ultra3iplus ultra4plus 和 ultrat1 为 UltraSPARC IIIiplus UltraSPARC T1 和 UltraSPARC IVplus 处 理 器 提 供 代 码 生 成 有 关 详 细 信 息, 请 参 见 第 A-136 页 的 第 A.2.167 节 "-xtarget=t" 和 第 A-80 页 的 第 A.2.113 节 "-xchip=c" 新 的 调 试 器 信 息 格 式 C++ 编 译 器 目 前 可 以 使 用 dwarf 格 式 来 生 成 调 试 器 信 息 默 认 格 式 仍 然 为 stabs 格 式, 但 可 以 通 过 将 新 选 项 -xdebugformat 设 置 为 -xdebugformat=dwarf 来 生 成 dwarf 数 据 请 参 见 第 A-85 页 的 第 A.2.116 节 "-xdebugformat=[stabs dwarf]" STACKSIZE 环 境 变 量 增 强 功 能 已 增 强 STACKSIZE 环 境 变 量 的 语 法, 可 接 受 用 于 表 示 从 属 线 程 栈 大 小 的 单 位 关 键 字 :B 表 示 字 节 ; K 表 示 千 字 节 ; M 表 示 兆 字 节 ; G 表 示 千 兆 字 节 例 如, setenv STACKSIZE 8192 将 从 属 线 程 栈 大 小 设 置 为 8 MB 1235B 将 从 属 线 程 栈 大 小 设 置 为 1235 字 节 ; 1235G 将 其 设 置 为 1235 千 兆 字 节 默 认 情 况 下, 没 有 后 缀 字 母 的 整 数 值 仍 然 为 千 字 节 OpenMP 自 动 确 定 作 用 域 1-2 C++ 用 户 指 南 2005 年 11 月

自 动 确 定 作 用 域 目 前 适 用 于 C++ 程 序 Sun Studio OpenMP API 用 户 指 南 的 第 3 章 中 介 绍 了 该 功 能 1.2 Sun Studio 10 C++ 5.7 编 译 器 的 新 特 性 和 新 功 能 本 节 简 要 介 绍 在 Sun Studio 10 C++ 5.7 编 译 器 发 行 版 本 中 引 入 的 C++ 编 译 器 的 新 特 性 和 新 功 能 有 关 详 细 的 说 明, 请 参 见 每 项 的 交 叉 引 用 -xarch 新 选 项 -xarch=amd64 指 定 了 64 位 AMD 指 令 集 编 译 有 关 -xarch=amd64 的 详 细 信 息, 请 参 见 第 A-69 页 的 第 A.2.105 节 "-xarch=isa" -xtarget 新 选 项 -xtarget=opteron 为 32 位 AMD 编 译 指 定 了 -xarch -xchip 和 -xcache 设 置 有 关 -xtarget=opteron 的 详 细 信 息, 请 参 见 第 A-136 页 的 第 A.2.167 节 "-xtarget=t" 注 要 生 成 64 位 代 码, 您 必 须 在 命 令 行 中 -fast 和 -xtarget 的 右 侧 指 定 -xarch=amd64 例 如, 指 定 CC -fast -xarch=amd64 或 CC -xtarget=opteron -xarch=amd64 -xtarget=opteron 新 选 项 并 不 自 动 生 成 64 位 代 码 它 扩 展 为 -xarch=sse2 -xchip=opteron 和 -xcache=64/64/2:1024/64/16, 而 产 生 32 位 代 码 -fast 选 项 也 会 产 生 32 位 代 码, 因 为 它 也 是 一 个 定 义 -xtarget=native 的 宏 除 传 统 SPARC 平 台 外, 现 有 -xarch=generic64 选 项 现 在 还 支 持 x86 平 台 如 果 指 定 了 -xarch=amd64, C++ 编 译 器 现 在 预 定 义 amd64 和 x86_64 利 用 -xregs 选 项 -xregs=[no%]frameptr 仅 限 x86 的 新 标 志, 您 可 以 将 帧 指 针 寄 存 器 用 作 未 分 配 的 被 调 用 方 保 存 寄 存 器 以 提 高 应 用 程 序 的 运 行 时 性 能 有 关 -xregs=[no%]frameptr 的 详 细 信 息, 请 参 见 第 A-131 页 的 第 A.2.160 节 "-xregs=r[,r...]" C++ 编 译 器 现 在 支 持 模 板 - 模 板 参 数 这 意 味 着, 可 以 使 用 本 身 就 是 模 板 的 参 数 来 指 定 模 板 定 义, 而 不 是 使 用 类 型 或 值 来 指 定 请 回 想 一 下, 在 类 型 上 实 例 化 的 模 板 本 身 就 是 类 型 考 虑 以 下 代 码 示 例 : template<typename T> class MyClass {... }; std::list< MyClass<int> > x; 第 1 章 C++ 编 译 器 1-3

因 为 MyClass<int> 是 一 种 类 型, 所 以 代 码 示 例 并 不 使 用 模 板 - 模 板 参 数 然 而, 在 以 下 代 码 示 例 中, 类 模 板 C 的 参 数 是 类 模 板, 而 对 象 x 则 是 C 的 实 例, 它 使 用 类 模 板 A 作 为 其 参 数 C 的 成 员 y 具 有 类 型 A<int> // 普 通 类 模 板 template<typename T> class A { T x; }; // 具 有 模 板 参 数 的 类 模 板 template< template<typename U> class V > class C { V<int> y; }; // 在 模 板 上 实 例 化 C C<A> x; 在 默 认 标 准 模 式 下, C++ 编 译 器 现 在 允 许 嵌 套 类 访 问 封 装 类 的 专 有 成 员 C++ 标 准 规 定 嵌 套 类 没 有 封 装 类 成 员 的 特 殊 访 问 权 限 然 而, 大 多 数 人 认 为 这 种 限 制 不 合 理, 因 为 成 员 函 数 拥 有 专 有 成 员 的 访 问 权 限, 因 此, 成 员 类 也 应 该 有 此 权 限 在 以 下 示 例 中, 函 数 foo 试 图 访 问 类 outer 的 专 有 成 员 按 照 C++ 标 准, 函 数 没 有 访 问 权 限, 除 非 将 其 声 明 为 友 元 函 数 : class outer { int i; // 在 outer 中 是 专 有 的 class inner { int foo(outer* p) { return p->i; // 无 效 } }; }; C++ 委 员 会 正 在 采 纳 对 访 问 规 则 所 做 的 更 改, 以 便 给 成 员 类 授 予 与 成 员 函 数 相 同 的 访 问 权 限 由 于 预 料 到 将 会 更 改 语 言 规 则, 很 多 编 译 器 已 经 实 现 了 这 种 规 则 要 恢 复 旧 的 编 译 器 行 为, 而 禁 用 这 种 访 问 权 限, 请 使 用 编 译 器 选 项 -features=no%nestedaccess 默 认 为 -features=nestedaccess 有 关 -features 的 详 细 信 息, 请 参 见 第 A-17 页 的 第 A.2.19 节 "-features=a[,a...]" 此 发 行 版 在 基 于 x86 系 统 的 Solaris 操 作 系 统 和 基 于 SPARC 系 统 的 Solaris 操 作 系 统 上 提 供 了 OpenMP API 以 实 现 共 享 内 存 并 行 性 这 两 种 平 台 现 在 都 启 用 相 同 的 功 能 1-4 C++ 用 户 指 南 2005 年 11 月

1.3 标 准 一 致 性 C++ 编 译 器 (CC) 支 持 C++ ISO 国 际 标 准 ISO IS 14882:1998, 编 程 语 言 C++ 当 前 发 行 版 本 附 带 的 自 述 文 件 描 述 了 与 标 准 需 求 的 所 有 差 异 在 SPARC 平 台 上, 编 译 器 提 供 了 对 SPARC V8 和 SPARC V9 ( 包 括 UltraSPARC 实 现 ) 优 化 开 发 功 能 的 支 持 在 Prentice-Hall for SPARC International 发 行 的 第 8 版 (ISBN 0-13-825001-4) 和 第 9 版 (ISBN 0-13-099227-5) SPARC Architecture Manual 中 定 义 了 这 些 功 能 在 本 文 档 中, 标 准 是 指 与 上 面 列 出 的 标 准 版 本 相 一 致 非 标 准 或 扩 展 是 指 超 出 这 些 标 准 版 本 的 功 能 负 责 标 准 的 一 方 可 能 会 不 时 地 修 订 这 些 标 准 C++ 编 译 器 兼 容 的 适 用 标 准 版 本 可 能 被 修 订 或 替 换, 这 将 会 导 致 以 后 的 Sun C++ 编 译 器 发 行 版 本 在 功 能 上 与 旧 的 发 行 版 本 产 生 不 兼 容 1.4 C++ 自 述 文 件 C++ 编 译 器 的 自 述 文 件 强 调 了 关 于 编 译 器 的 重 要 信 息, 其 中 包 括 : 在 手 册 印 刷 之 后 发 现 的 信 息 新 特 性 和 更 改 的 特 性 软 件 更 正 问 题 和 解 决 办 法 限 制 和 不 兼 容 可 发 送 库 未 实 现 的 标 准 要 查 看 C++ 自 述 文 件 的 文 本 格 式 文 件, 请 在 命 令 提 示 符 后 键 入 以 下 命 令 : example% CC -xhelp=readme 要 访 问 自 述 文 件 的 HTML 格 式 文 件, 请 在 您 的 Netscape Communicator 4.0 或 兼 容 版 本 的 浏 览 器 中 打 开 以 下 文 件 : /opt/sunwspro/docs/zh/index.html ( 如 果 您 的 C++ 编 译 器 软 件 没 有 安 装 在 /opt 目 录 中, 请 通 过 系 统 管 理 员 获 取 系 统 中 的 相 应 路 径 ) 浏 览 器 可 以 显 示 HTML 文 档 的 索 引 要 打 开 自 述 文 件, 请 在 索 引 中 查 找 它 的 对 应 条 目, 然 后 单 击 主 题 第 1 章 C++ 编 译 器 1-5

1.5 手 册 页 联 机 手 册 (man) 页 提 供 了 关 于 命 令 函 数 例 行 程 序 以 及 收 集 这 些 信 息 的 文 档 可 以 通 过 运 行 以 下 命 令 来 显 示 手 册 页 : example% man topic 在 整 个 C++ 文 档 中, 手 册 页 参 考 以 主 题 名 称 和 手 册 节 编 号 显 示 :cc(1) 通 过 man cc 进 行 访 问 其 他 部 分 ( 例 如 用 ieee_flags(3m) 表 示 的 节 ) 要 使 用 man 命 令 和 该 命 令 的 -s 选 项 来 访 问 : example% man -s 3M ieee_flags 1.6 C++ 实 用 程 序 以 下 C++ 实 用 程 序 现 已 并 入 传 统 的 UNIX 工 具 并 且 与 UNIX 操 作 系 统 捆 绑 在 了 一 起 : lex 生 成 文 本 简 单 词 法 分 析 的 程 序 yacc 根 据 语 法 生 成 C 函 数 分 析 输 入 流 prof 生 成 程 序 模 块 的 执 行 性 能 分 析 gprof 按 过 程 来 配 置 程 序 运 行 时 性 能 tcov 按 语 句 来 配 置 程 序 运 行 时 性 能 关 于 这 些 UNIX 工 具 的 详 细 信 息, 请 参 见 程 序 性 能 分 析 工 具 和 相 关 的 手 册 页 1.7 本 地 语 言 支 持 此 发 行 版 本 的 C++ 支 持 使 用 英 语 以 外 的 其 他 语 言 进 行 应 用 程 序 的 开 发, 包 括 了 大 多 数 欧 洲 语 言 和 日 语 因 此, 您 可 以 十 分 便 捷 地 将 应 用 程 序 从 一 种 语 言 切 换 到 另 一 种 语 言 此 功 能 被 称 为 国 际 化 通 常, C++ 编 译 器 按 如 下 方 式 实 现 国 际 化 : C++ 从 国 际 化 的 键 盘 识 别 ASCII 字 符 ( 也 就 是 说, 它 具 有 键 盘 独 立 性 和 8 位 清 除 ) C++ 允 许 使 用 本 地 语 言 打 印 某 些 消 息 1-6 C++ 用 户 指 南 2005 年 11 月

C++ 允 许 在 注 释 字 符 串 和 数 据 中 使 用 本 地 语 言 C++ 只 支 持 符 合 扩 展 UNIX 字 符 (EUC) 的 字 符 集, 在 该 字 符 集 中 字 符 串 内 的 每 个 空 字 节 是 一 个 空 字 符, 而 每 个 "/" 的 ascii 值 是 "/" 字 符 变 量 名 称 不 能 国 际 化, 必 须 使 用 英 文 字 符 集 您 可 以 设 置 语 言 环 境 将 应 用 程 序 从 一 种 本 地 语 言 更 改 为 另 一 种 语 言 关 于 这 一 点 和 其 他 本 地 语 言 支 持 功 能 的 信 息, 请 参 见 操 作 系 统 文 档 第 1 章 C++ 编 译 器 1-7

1-8 C++ 用 户 指 南 2005 年 11 月

第 2 章 使 用 C++ 编 译 器 本 章 描 述 了 如 何 使 用 C++ 编 译 器 任 何 编 译 器 的 主 要 用 途 是 将 高 级 语 言 ( 如 C++) 编 写 的 程 序 转 换 成 目 标 计 算 机 硬 件 可 执 行 的 数 据 文 件 您 可 以 使 用 C++ 编 译 器 完 成 以 下 任 务 : 将 源 文 件 转 换 成 可 重 定 位 的 二 进 制 (.o) 文 件 静 态 ( 归 档 ) 库 (.a) 文 件 ( 使 用 -xar) 或 动 态 ( 共 享 ) 库 (.so) 文 件 其 中 二 进 制 文 件 可 以 在 以 后 链 接 成 可 执 行 文 件 将 对 象 文 件 或 库 文 件 ( 或 两 者 ) 链 接 或 重 链 接 成 可 执 行 文 件 启 用 运 行 时 调 试 (-g) 来 编 译 可 执 行 文 件 启 用 运 行 时 语 句 或 过 程 级 别 的 文 件 配 置 (-pg) 来 编 译 可 执 行 文 件 2.1 入 门 本 节 简 要 概 述 了 如 何 使 用 C++ 编 译 器 编 译 和 运 行 C++ 程 序 关 于 命 令 行 选 项 的 完 整 参 考, 请 参 见 附 录 A 注 本 节 中 的 命 令 行 示 例 显 示 了 CC 的 用 法 打 印 输 出 可 能 会 稍 有 不 同 生 成 和 运 行 C++ 程 序 的 基 本 步 骤 包 括 : 1. 使 用 编 辑 器 创 建 具 有 表 2-1 中 列 出 的 有 效 后 缀 之 一 的 C++ 源 文 件 2. 调 用 编 译 器 来 生 成 可 执 行 文 件 3. 通 过 输 入 可 执 行 文 件 的 名 称 来 启 动 程 序 2-1

以 下 程 序 在 屏 幕 上 显 示 消 息 : example% cat greetings.cc #include <iostream> int main() { std::cout << "Real programmers write C++!" << std::endl; return 0; } example% CC greetings.cc example% a.out Real programmers write C++! example% 在 此 示 例 中, CC 编 译 源 文 件 greetings.cc, 并 且 在 默 认 情 况 下 将 编 译 可 执 行 程 序 生 成 a.out 文 件 要 启 动 程 序, 请 在 命 令 行 提 示 符 后 键 入 可 执 行 文 件 a.out 的 名 称 按 传 统 方 法,UNIX 编 译 器 为 可 执 行 文 件 a.out 命 名 每 次 编 译 都 写 入 到 同 一 个 文 件 是 比 较 笨 拙 的 方 法 另 外, 如 果 已 经 有 这 样 一 个 文 件 存 在, 下 次 运 行 编 译 器 时 该 文 件 将 被 覆 盖 如 以 下 示 例 所 示, 改 为 使 用 -o 编 译 器 选 项 来 指 定 可 执 行 输 出 文 件 的 名 称 : example% CC -o greetings greetings.c 在 此 示 例 中,-o 选 项 告 知 编 译 器 将 可 执 行 代 码 写 入 文 件 greetings ( 由 单 独 源 文 件 组 成 的 程 序 通 常 提 供 无 后 缀 的 源 文 件 名 称 ) 或 者, 可 以 在 每 次 编 译 后 使 用 mv 命 令 来 重 命 名 默 认 的 a.out 文 件 无 论 是 哪 种 方 式, 都 可 以 键 入 可 执 行 文 件 的 名 称 来 运 行 程 序 : example% greetings Real programmers write C++! example% 2.2 调 用 编 译 器 本 节 的 其 他 部 分 讨 论 了 使 用 CC 命 令 的 约 定 编 译 器 源 代 码 行 指 令 和 编 译 器 使 用 的 其 他 有 关 问 题 2-2 C++ 用 户 指 南 2005 年 1 月

2.2.1 命 令 语 法 编 译 器 命 令 行 的 通 用 语 法 如 下 所 示 : CC [options] [source-files] [object-files] [libraries] option 是 前 缀 为 短 线 (-) 或 加 法 符 号 (+) 的 选 项 关 键 字 某 些 选 项 带 有 参 数 通 常, 编 译 器 选 项 的 处 理 是 由 左 到 右, 允 许 有 选 择 地 覆 盖 宏 选 项 ( 即 包 括 其 他 选 项 的 选 项 ) 在 大 多 数 的 情 况 下, 如 果 您 多 次 指 定 同 一 个 选 项, 那 么 最 右 边 的 赋 值 会 覆 盖 前 面 的 赋 值, 而 不 会 累 积 注 意 以 下 特 殊 情 况 : 所 有 的 链 接 程 序 选 项 和 -features -I -l -L -library -pti -R/-staticlib -U -verbose -xdumpmacros 和 -xprefetch 选 项 将 会 累 积 而 不 会 覆 盖 所 有 的 -U 选 项 都 在 所 有 的 -D 选 项 后 处 理 源 文 件 对 象 文 件 和 库 按 它 们 在 命 令 行 上 出 现 的 顺 序 编 译 并 链 接 在 以 下 示 例 中, CC 用 于 编 译 两 个 源 文 件 (growth.c 和 fft.c) 以 在 启 用 运 行 时 调 试 的 情 况 下 生 成 名 为 growth 的 可 执 行 文 件 example% CC -g -o growth growth.c fft.c 2.2.2 文 件 名 称 约 定 出 现 在 命 令 行 上 文 件 名 称 的 附 加 后 缀 决 定 了 编 译 器 处 理 文 件 的 方 式 如 果 文 件 名 称 的 后 缀 没 有 在 下 表 中 列 出, 或 文 件 名 称 没 有 后 缀, 那 么 都 要 传 递 到 链 接 程 序 表 2-1 C++ 编 译 器 识 别 的 文 件 名 称 后 缀 后 缀 语 言 操 作.c C++ 作 为 C++ 源 文 件 编 译, 将 对 象 文 件 放 入 当 前 目 录 ; 对 象 文 件 的 默 认 名 称 是 带 有.o 后 缀 的 源 名 称.C C++ 与.c 后 缀 相 同 的 操 作.cc C++ 与.c 后 缀 相 同 的 操 作.cpp C++ 与.c 后 缀 相 同 的 操 作.cxx C++ 与.c 后 缀 相 同 的 操 作.c++ C++ 与.c 后 缀 相 同 的 操 作.i C++ 将 预 处 理 程 序 输 出 文 件 作 为 C++ 源 文 件 处 理 与.c 后 缀 相 同 的 操 作 第 2 章 使 用 C++ 编 译 器 2-3

表 2-1 C++ 编 译 器 识 别 的 文 件 名 称 后 缀 ( 续 ) 后 缀 语 言 操 作.s 汇 编 程 序 使 用 汇 编 程 序 的 汇 编 源 文 件.S 汇 编 程 序 使 用 C 语 言 预 处 理 程 序 和 汇 编 程 序 的 汇 编 源 文 件.il 内 联 扩 展 处 理 内 联 扩 展 的 汇 编 内 联 模 板 文 件 编 译 器 将 使 用 模 板 来 扩 展 选 定 例 程 的 内 联 调 用 ( 内 联 模 板 文 件 是 特 殊 的 汇 编 文 件 请 参 见 inline(1) 手 册 页 ).o 对 象 文 件 将 对 象 文 件 传 递 到 链 接 程 序.a 静 态 ( 归 档 ) 库 将 对 象 库 名 传 递 到 链 接 程 序.so.so.n 动 态 ( 共 享 ) 库 将 共 享 对 象 的 名 称 传 递 到 链 接 程 序 2.2.3 使 用 多 个 源 文 件 C++ 编 译 器 在 命 令 行 上 接 受 多 个 源 文 件 编 译 器 编 译 的 单 独 源 文 件 与 编 译 器 直 接 或 间 接 支 持 的 任 何 文 件 一 起 称 为 编 译 单 元 C++ 将 每 个 源 作 为 一 个 单 独 的 编 译 单 元 处 理 2.3 使 用 不 同 编 译 器 版 本 进 行 编 译 从 C++ 5.1 编 译 器 开 始, 编 译 器 就 使 用 标 识 模 板 缓 存 版 本 的 字 符 串 来 标 记 模 板 缓 存 目 录 此 编 译 器 在 默 认 情 况 下 不 使 用 缓 存 只 有 指 定 -instances=extern 后, 该 编 译 器 才 使 用 缓 存 如 果 编 译 器 使 用 缓 存, 就 要 检 查 缓 存 目 录 的 版 本, 并 在 遇 到 缓 存 版 本 问 题 时 发 出 错 误 消 息 以 后 的 C++ 编 译 器 也 会 检 查 缓 存 的 版 本 例 如, 具 有 不 同 模 板 缓 存 版 本 标 识 的 未 来 版 本 编 译 器 在 处 理 此 发 行 版 本 的 编 译 器 生 成 的 缓 存 目 录 时, 会 发 出 与 以 下 消 息 类 似 的 错 误 :./SunWS_cache 的 模 板 数 据 库 与 此 编 译 器 不 兼 容 编 译 器 遇 到 新 版 本 的 编 译 器 生 成 的 缓 存 目 录 时, 也 会 发 出 类 似 的 错 误 尽 管 C++ 5.0 编 译 器 生 成 的 模 板 缓 存 目 录 没 有 标 记 版 本 标 识 符, 但 是 当 前 编 译 器 在 处 理 5.0 缓 存 目 录 时 不 会 发 出 错 误 或 警 告 编 译 器 将 5.0 缓 存 目 录 转 换 为 编 译 器 使 用 的 目 录 格 式 2-4 C++ 用 户 指 南 2005 年 1 月

C++ 5.0 编 译 器 不 能 使 用 新 版 本 编 译 器 生 成 的 缓 存 目 录 C++ 5.0 编 译 器 不 能 识 别 格 式 差 异, 并 在 遇 到 由 C++ 5.1 或 新 版 本 编 译 器 生 成 的 缓 存 目 录 时 将 会 发 出 断 言 升 级 编 译 器 时, 最 好 清 除 缓 存 在 包 含 模 板 缓 存 目 录 ( 在 大 多 数 的 情 况 下, 模 板 缓 存 目 录 命 名 为 SunWS_cache) 的 每 个 目 录 中 运 行 CCadmin -clean 或 者, 可 以 使 用 rm - rf SunWS_cache 关 于 如 何 清 除 模 板 的 最 新 说 明, 请 参 见 http://forte.sun.com/s1scc/articles/index.html 上 的 技 术 文 章 升 级 C++ 编 译 器 2.4 编 译 和 链 接 本 节 描 述 了 编 译 和 链 接 程 序 的 某 些 方 面 在 以 下 示 例 中,CC 用 来 编 译 三 个 源 文 件, 并 链 接 对 象 文 件 以 生 成 名 为 prgrm 的 可 执 行 文 件 example% CC file1.cc file2.cc file3.cc -o prgrm 2.4.1 编 译 和 链 接 序 列 在 上 述 示 例 中, 编 译 器 自 动 生 成 加 载 器 对 象 文 件 (file1.o file2.o 和 file3.o), 然 后 调 用 系 统 链 接 程 序 为 文 件 prgrm 创 建 可 执 行 程 序 编 译 以 后, 仍 然 保 留 对 象 文 件 (file1.o file2.o 和 file3.o) 此 约 定 让 您 易 于 重 新 链 接 和 重 新 编 译 文 件 注 如 果 在 同 一 个 操 作 中 仅 编 译 一 个 源 文 件 和 链 接 一 个 程 序, 则 相 应 的.o 文 件 被 自 动 删 除 要 保 留 所 有 的.o 文 件, 除 非 要 编 译 多 个 源 文 件, 否 则 请 不 要 在 同 一 操 作 中 进 行 编 译 和 链 接 如 果 编 译 失 败, 您 将 收 到 每 个 错 误 的 对 应 消 息 不 会 为 那 些 有 错 的 源 文 件 生 成.o 文 件, 也 不 会 为 它 们 生 成 可 执 行 程 序 第 2 章 使 用 C++ 编 译 器 2-5

2.4.2 分 别 编 译 和 链 接 您 可 以 分 别 进 行 编 译 和 链 接 -c 选 项 编 译 源 文 件 并 生 成.o 对 象 文 件, 但 不 创 建 可 执 行 文 件 没 有 -c 选 项, 编 译 器 将 调 用 链 接 程 序 通 过 将 编 译 和 链 接 步 骤 分 开, 仅 修 复 一 个 文 件 而 不 需 要 完 全 重 新 编 译 以 下 示 例 显 示 了 如 何 以 独 立 的 步 骤 编 译 一 个 文 件 并 与 其 他 文 件 链 接 : example% CC -c file1.cc example% CC -o prgrm file1.o file2.o file3.o 生 成 新 的 对 象 文 件 生 成 可 执 行 文 件 确 保 链 接 步 骤 列 出 了 生 成 完 整 程 序 所 需 的 全 部 对 象 文 件 如 果 这 一 步 骤 中 丢 失 了 所 有 的 对 象 文 件, 则 链 接 将 失 败 并 出 现 未 定 义 的 外 部 引 用 错 误 ( 丢 失 例 程 ) 2.4.3 一 致 编 译 和 链 接 如 果 以 独 立 的 步 骤 编 译 和 链 接, 那 么 使 用 以 下 编 译 器 选 项 来 进 行 一 致 的 编 译 和 链 接 是 十 分 重 要 的 : -B -compat -fast -g -g0 -library -misalign -mt -p -xa -xarch -xcg92 and -xcg89 -xipo -xpagesize -xpg -xprofile -xtarget 如 果 您 使 用 这 些 选 项 之 一 来 编 译 子 程 序, 请 确 保 使 用 相 同 的 选 项 进 行 链 接 : 在 使 用 -library -fast -xtarget 和 -xarch 选 项 时, 必 须 确 保 包 括 了 链 接 程 序 选 项 如 果 编 译 和 链 接 同 时 进 行 的 话, 就 可 以 忽 略 这 些 链 接 程 序 选 项 对 于 -p -xpg 和 -xprofile, 将 选 项 包 括 在 一 个 阶 段 而 从 其 他 阶 段 排 除 并 不 影 响 程 序 的 正 确 性, 但 是 您 将 不 能 进 行 文 件 配 置 2-6 C++ 用 户 指 南 2005 年 1 月

对 于 -g 和 -g0, 将 选 项 包 括 在 一 个 阶 段 而 从 其 他 状 态 排 除 不 影 响 程 序 的 正 确 性, 但 影 响 调 试 程 序 的 能 力 任 何 使 用 -g 或 -g0 来 链 接 程 序, 但 没 有 使 用 这 两 个 选 择 中 的 一 个 进 行 编 译 的 模 块 将 无 法 正 确 调 试 注 意, 调 试 通 常 需 要 使 用 -g 选 项 或 -g0 选 项 编 译 具 有 函 数 main 的 模 块 以 下 示 例 中, 使 用 -xcg92 编 译 器 选 项 来 编 译 程 序 此 选 项 是 用 于 -xtarget=ss1000 的 宏, 可 以 扩 展 为 :- xarch=v8 -xchip=super -xcache=16/64/4:1024/64/1 example% CC -c -xcg92 sbr.cc example% CC -c -xcg92 smain.cc example% CC -xcg92 sbr.o smain.o 如 果 程 序 使 用 模 板, 则 某 些 模 板 可 能 会 在 链 接 期 间 被 实 例 化 在 这 种 情 况 下, 来 自 最 后 一 行 ( 链 接 行 ) 的 命 令 行 选 项 将 用 于 编 译 实 例 化 的 模 板 2.4.4 为 SPARC V9 编 译 只 有 在 运 行 64 位 内 核 的 V9 SPARC Solaris 8 操 作 系 统 中 才 支 持 64 位 对 象 的 编 译 链 接 和 执 行 64 位 编 译 由 -xarch=v9 -xarch==v9a 和 -xarch=v9b 选 项 来 指 示 2.4.5 诊 断 编 译 器 可 以 使 用 -verbose 选 项 在 编 译 程 序 的 同 时 显 示 帮 助 信 息, 例 如 编 译 器 调 用 的 程 序 名 称 和 版 本 号 以 及 每 个 编 译 阶 段 的 命 令 行 编 译 器 无 法 识 别 的 命 令 行 上 的 任 何 参 数 被 解 释 为 链 接 程 序 选 项 对 象 程 序 文 件 名 或 库 名 基 本 区 别 是 : 无 法 识 别 的 选 项 会 生 成 警 告 这 些 选 项 一 般 带 有 前 缀 短 线 (-) 或 加 法 符 号 (+) 无 法 识 别 的 非 选 项 不 会 生 成 警 告 这 些 非 选 项 一 般 不 带 有 前 缀 短 线 或 加 法 符 号 ( 然 而, 这 些 选 项 会 传 递 到 链 接 程 序 如 果 链 接 程 序 无 法 识 别 它 们, 将 会 生 成 链 接 程 序 错 误 消 息 ) 以 下 示 例 中, 注 意 CC 无 法 识 别 -bit, 该 选 项 被 传 递 到 尝 试 解 释 它 的 链 接 程 序 (ld) 因 为 单 字 母 ld 选 项 可 以 被 连 在 一 起, 所 以 链 接 程 序 将 -bit 视 为 -b -i -t, 所 有 这 些 都 是 合 法 的 ld 选 项 这 可 能 并 不 是 您 所 希 望 看 到 的 结 果 : example% CC -bit move.cc <- -bit 不 是 一 个 可 识 别 的 CC 选 项 CC: 警 告 : 如 果 调 用 了 ld, 则 将 选 项 -bit 传 递 至 ld, 否 则 会 将 其 忽 略 第 2 章 使 用 C++ 编 译 器 2-7

以 下 示 例 中, 用 户 打 算 键 入 CC 选 项 -fast, 但 是 省 略 前 导 短 线 编 译 器 又 一 次 将 参 数 传 递 到 链 接 程 序, 而 链 接 程 序 将 参 数 解 释 为 文 件 名 称 : example% CC fast move.cc <- 用 户 要 键 入 -fast move.cc: ld: 致 命 的 : 文 件 fast: 打 开 失 败 ; errno=2 ld: 致 命 的 : 文 件 处 理 失 败 No output written to a.out 2.4.6 了 解 编 译 器 的 组 织 C++ 编 译 器 软 件 包 由 前 端 优 化 器 代 码 生 成 器 汇 编 程 序 模 板 预 链 接 程 序 和 链 接 编 辑 器 组 成 除 非 您 使 用 命 令 行 选 项 进 行 指 定, 否 则 CC 命 令 将 逐 个 自 动 调 用 这 些 组 件 因 为 这 些 组 件 中 的 任 何 一 个 都 可 能 生 成 错 误, 并 且 各 个 组 件 执 行 不 同 的 任 务, 所 以 标 识 生 成 错 误 的 组 件 是 有 意 义 的 使 用 -v 和 -dryrun 选 项 来 帮 助 实 现 这 一 目 的 正 如 下 表 所 示, 不 同 编 译 器 组 件 的 输 入 文 件 拥 有 不 同 的 文 件 名 后 缀 后 缀 建 立 了 要 进 行 的 编 译 类 型 关 于 文 件 后 缀 的 含 义 请 参 见 表 2-1 表 2-2 C++ 编 译 系 统 的 组 件 组 件 描 述 使 用 说 明 ccfe 前 端 ( 编 译 器 预 处 理 程 序 和 编 译 器 ) iropt SPARC: 代 码 优 化 器 -xo[2-5], -fast ir2hf x86: 中 间 语 言 转 换 器 -xo[2-5], -fast inline SPARC: 汇 编 语 言 模 板 的 内 联 扩 展 指 定 的.il 文 件 ube_ipa x86: 程 间 的 分 析 器 -xcrossfile=1 和 -xo4 -xo5 或 -fast fbe 汇 编 程 序 cg SPARC: 代 码 生 成 器 内 联 函 数 汇 编 程 序 ube x86: 代 码 生 成 器 -xo[2-5], -fast CClink 模 板 预 链 接 程 序 ld 非 递 增 式 链 接 编 辑 器 ild 递 增 式 链 接 编 辑 器 -g, -xildon 2-8 C++ 用 户 指 南 2005 年 1 月

2.5 预 处 理 指 令 和 名 称 本 节 讨 论 了 关 于 预 处 理 C++ 编 译 器 所 特 有 的 指 令 信 息 2.5.1 Pragma 预 处 理 程 序 关 键 字 pragma 是 C++ 标 准 的 一 部 分, 但 pragma 的 形 式 内 容 和 含 义 对 每 个 编 译 器 是 不 同 的 关 于 C++ 编 译 器 识 别 的 pragmas 列 表, 请 参 见 附 录 B 2.5.2 具 有 可 变 数 量 参 数 的 宏 C++ 编 译 器 接 受 以 下 形 式 的 #define 预 处 理 程 序 指 令 #define identifier (...) replacement_list #define identifier (identifier_list,...) replacement_list 如 果 列 出 的 宏 参 数 以 省 略 号 结 尾, 那 么 该 宏 的 调 用 允 许 使 用 除 了 宏 参 数 以 外 的 其 他 更 多 参 数 附 加 参 数 被 收 集 在 一 个 单 独 的 字 符 串 中, 该 字 符 串 可 以 包 括 逗 号 可 以 使 用 宏 替 换 列 表 中 的 名 称 VA_ARGS 来 引 用 这 些 附 加 参 数 以 下 示 例 说 明 了 如 何 使 用 可 变 参 数 列 表 的 宏 #define debug(...) fprintf(stderr, VA_ARGS ) #define showlist(...) puts(# VA_ARGS ) #define report(test,...)((test)?puts(#test):\ printf( VA_ARGS )) debug( Flag ); debug( X = %d\n,x); showlist(the first, second, and third items.); report(x>y, "x is %d but y is %d", x, y); 其 结 果 如 下 : fprintf(stderr, "Flag"); fprintf(stderr, X = %d\n, x); puts( The first, second, and third items. ); ((x>y)?puts("x>y"):printf("x is %d but y is %d", x, y)); 第 2 章 使 用 C++ 编 译 器 2-9

2.5.3 预 定 义 的 名 称 附 录 中 的 表 A-3 显 示 了 预 定 义 的 宏 您 可 以 在 #ifdef 这 样 的 预 处 理 程 序 条 件 中 使 用 这 些 值 +p 选 项 防 止 了 sun unix sparc 和 i386 预 定 义 宏 的 自 动 定 义 2.5.4 #error 在 发 出 警 告 以 后,#error 指 令 不 会 继 续 编 译 指 令 原 来 的 行 为 是 发 出 警 告 并 继 续 编 译 其 新 行 为 ( 和 其 他 编 译 器 保 持 一 致 ) 是 发 出 错 误 消 息 并 立 即 停 止 编 译 编 译 器 退 出 并 报 告 失 败 2.6 内 存 要 求 编 译 需 要 的 内 存 量 取 决 于 多 个 参 数, 包 括 : 每 个 过 程 的 大 小 优 化 级 别 为 虚 拟 内 存 设 置 的 限 制 磁 盘 交 换 文 件 的 大 小 在 SPARC 平 台 上, 如 果 优 化 器 用 完 了 所 有 内 存, 那 么 它 将 通 过 在 较 低 优 化 级 别 上 重 试 当 前 过 程 来 尝 试 恢 复 然 后 优 化 器 将 在 命 令 行 用 -xolevel 选 项 指 定 的 原 优 化 级 别 上, 继 续 随 后 的 例 程 如 果 编 译 包 括 大 量 例 程 的 单 独 源 文 件, 编 译 器 可 能 会 用 完 所 有 内 存 或 交 换 空 间 如 果 编 译 器 用 完 了 内 存, 可 以 尝 试 降 低 优 化 级 别 或 者, 可 以 将 多 例 程 的 源 文 件 分 割 为 单 例 程 的 文 件 2.6.1 交 换 空 间 大 小 swap -s 命 令 显 示 了 可 用 的 交 换 空 间 更 多 信 息 请 参 见 swap(1m) 手 册 页 以 下 示 例 显 示 了 swap 命 令 的 使 用 : example% swap -s total:40236k bytes allocated + 7280k reserved = 47516k used, 1058708k available 2-10 C++ 用 户 指 南 2005 年 1 月

2.6.2 增 加 交 换 空 间 使 用 mkfile(1m) 和 swap (1M) 来 增 加 工 作 站 上 交 换 空 间 的 大 小 ( 您 必 须 成 为 超 级 用 户 才 能 执 行 该 操 作 )mkfile 命 令 创 建 指 定 大 小 的 文 件, 而 swap -a 将 文 件 增 加 到 系 统 交 换 空 间 : example# mkfile -v 90m /home/swapfile /home/swapfile 94317840 bytes example# /usr/sbin/swap -a /home/swapfile 2.6.3 虚 拟 内 存 的 控 制 在 -xo3 或 更 高 级 别 上 编 译 大 型 例 程 ( 单 个 过 程 中 包 含 了 几 千 行 代 码 ) 会 需 要 大 量 的 内 存 在 这 种 情 况 下, 系 统 性 能 可 能 降 低 您 可 以 通 过 限 制 单 个 进 程 的 可 用 虚 拟 内 存 量 来 控 制 这 种 情 况 要 限 制 sh shell 的 虚 拟 内 存, 请 使 用 ulimit 命 令 更 多 信 息 请 参 见 sh(1) 手 册 页 以 下 示 例 显 示 了 如 何 将 虚 拟 内 存 限 制 为 16M example$ ulimit -d 16000 在 csh shell 中, 使 用 limit 命 令 来 限 制 虚 拟 内 存 更 多 信 息 请 参 见 csh(1) 手 册 页 下 一 个 示 例 也 显 示 了 如 何 将 虚 拟 内 存 限 制 为 16M example% limit datasize 16M 这 些 示 例 都 使 优 化 器 在 数 据 空 间 达 到 16M 时 尝 试 恢 复 虚 拟 空 间 的 限 制 不 能 大 于 系 统 总 的 可 用 交 换 空 间 在 实 际 使 用 时, 虚 拟 空 间 的 限 制 要 足 够 的 小, 以 允 许 在 大 型 编 译 过 程 中 正 常 使 用 系 统 请 确 保 编 译 不 会 消 耗 一 半 以 上 的 交 换 空 间 对 于 32M 的 交 换 空 间, 请 使 用 以 下 命 令 : 在 sh shell 中 : example$ ulimit -d 16000 第 2 章 使 用 C++ 编 译 器 2-11

在 csh shell 中 : example% limit datasize 16M 最 佳 设 置 取 决 于 要 求 的 优 化 程 度 实 际 内 存 量 和 可 用 的 虚 拟 内 存 量 2.6.4 内 存 要 求 工 作 站 至 少 需 要 64M 的 内 存, 推 荐 使 用 128M 要 决 定 实 际 内 存, 请 使 用 以 下 命 令 : example% /usr/sbin/dmesg grep mem mem = 655360K (0x28000000) avail mem = 602476544 2.7 简 化 命 令 您 可 以 通 过 使 用 CCFLAGS 环 境 变 量 或 通 过 使 用 make 来 定 义 特 殊 的 shell 别 名, 简 化 复 杂 的 编 译 器 命 令 2.7.1 在 C Shell 中 使 用 别 名 以 下 示 例 为 带 有 常 用 选 项 的 命 令 定 义 了 别 名 example% alias CCfx "CC -fast -xnolibmil" 下 面 的 示 例 使 用 了 别 名 CCfx example% CCfx any.c 命 令 CCfx 现 在 等 价 于 : example% CC -fast -xnolibmil any.c 2-12 C++ 用 户 指 南 2005 年 1 月

2.7.2 使 用 CCFLAGS 来 指 定 编 译 选 项 您 可 以 设 置 CCFLAGS 变 量 来 指 定 选 项 CCFLAGS 变 量 可 以 在 命 令 行 中 显 式 使 用 下 列 示 例 说 明 了 如 何 设 置 CCFLAGS (C Shell): example% setenv CCFLAGS '-xo2 -xsb' 下 面 的 示 例 显 式 使 用 CCFLAGS example% CC $CCFLAGS any.cc 当 您 使 用 make 时, 如 果 CCFLAGS 变 量 像 上 述 示 例 那 样 设 置, 并 且 makefile 的 编 译 规 则 是 隐 式 的, 那 么 调 用 make 会 导 致 编 译 等 价 于 : CC -xo2 -xsb files... 2.7.3 使 用 make make 实 用 程 序 是 功 能 十 分 强 大 的 程 序 开 发 工 具, 可 以 方 便 地 和 所 有 Sun 编 译 器 一 起 使 用 更 多 信 息 请 参 见 make(1s) 手 册 页 2.7.3.1 和 make 一 起 使 用 CCFLAGS 使 用 makefile 的 隐 式 编 译 规 则 时 ( 即 没 有 C++ 编 译 行 ),make 程 序 自 动 使 用 CCFLAGS 2.7.3.2 为 Makefile 增 加 后 缀 您 可 以 将 不 同 的 文 件 后 缀 增 加 到 makefile 以 使 它 们 收 入 C++ 中 以 下 示 例 将.cpp 增 加 为 C++ 文 件 的 有 效 后 缀 将 SUFFIXES 宏 增 加 到 makefile: SUFFIXES:.cpp.cpp~ ( 此 行 可 以 放 置 在 makefile 的 任 何 位 置 ) 第 2 章 使 用 C++ 编 译 器 2-13

将 以 下 各 行 增 加 到 makefile 缩 进 的 行 必 须 以 制 表 符 开 头.cpp: $(LINK.cc) -o $@ $< $(LDLIBS).cpp~: $(GET) $(GFLAGS) -p $< > $*.cpp $(LINK.cc) -o $@ $*.cpp $(LDLIBS).cpp.o: $(COMPILE.cc) $(OUTPUT_OPTION) $<.cpp~.o: $(GET) $(GFLAGS) -p $< > $*.cpp $(COMPILE.cc) $(OUTPUT_OPTION) $<.cpp.a: $(COMPILE.cc) -o $% $< $(COMPILE.cc) -xar $@ $% $(RM) $%.cpp~.a: $(GET) $(GFLAGS) -p $< > $*.cpp $(COMPILE.cc) -o $% $< $(COMPILE.cc) -xar $@ $% 2.7.3.3 和 标 准 库 头 文 件 一 起 使 用 make 标 准 库 文 件 的 名 称 不 包 括.h 后 缀 相 反, 它 们 命 名 为 istream fstream 等 等 此 外, 模 板 源 文 件 命 名 为 istream.cc fstream.cc 等 等 2-14 C++ 用 户 指 南 2005 年 1 月

第 3 章 使 用 C++ 参 阅 编 译 器 选 项 本 章 说 明 了 如 何 使 用 命 令 行 C++ 编 译 器 选 项, 并 按 功 能 汇 总 它 们 的 使 用 关 于 选 项 的 详 细 解 释, 请 参 见 附 录 A 3.1 语 法 下 表 显 示 了 本 书 中 使 用 的 典 型 选 项 语 法 格 式 的 示 例 表 3-1 选 项 语 法 格 式 示 例 语 法 格 式 示 例 -option -E -optionvalue -Ipathname -option=value -xunroll=4 -option value -o filename 圆 括 号 大 括 号 括 号 管 道 字 符 和 省 略 号 是 选 项 说 明 中 使 用 的 元 字 符, 而 不 是 选 项 自 身 的 一 部 分 关 于 使 用 语 法 的 详 细 解 释, 请 参 见 本 手 册 前 面 的 阅 读 本 书 之 前 中 的 印 刷 约 定 3.2 通 用 指 南 C++ 编 译 器 选 项 的 某 些 通 用 指 南 : -llib 选 项 和 liblib.a 库 ( 或 liblib.so) 一 起 链 接 将 -llib 放 置 在 源 文 件 和 对 象 文 件 后 面 可 以 确 保 搜 索 库 时 的 顺 序 更 加 安 全 3-1

一 般, 编 译 器 选 项 的 处 理 是 由 左 到 右 ( 除 了 -U 选 项 要 在 所 有 -D 选 项 处 理 以 后 ), 允 许 有 选 择 性 地 覆 盖 宏 选 项 ( 即 包 括 其 他 选 项 的 选 项 ) 此 规 则 不 适 用 于 链 接 程 序 选 项 features -I -l -L -library -pti -R -staticlib -U -verbose 和 -xprefetch 选 项 将 会 累 积 而 不 会 覆 盖 D 选 项 会 积 累, 不 过 同 一 个 名 称 的 多 个 -D 选 项 会 互 相 覆 盖 源 文 件 对 象 文 件 和 库 按 它 们 在 命 令 行 上 出 现 的 顺 序 编 译 和 链 接 3.3 按 功 能 汇 总 的 选 项 在 本 节 中, 编 译 器 选 项 按 功 能 分 组 以 便 提 供 快 速 参 考 关 于 每 个 选 项 的 详 细 描 述, 请 参 见 附 录 A 选 项 适 用 于 除 了 说 明 以 外 的 所 有 平 台 ; 基 于 SPARC 系 统 的 Solaris 操 作 系 统 专 有 的 特 性 标 识 为 SPARC, 而 基 于 x86 系 统 的 Solaris 操 作 系 统 专 有 的 特 性 标 识 为 x86 3.3.1 代 码 生 成 选 项 以 下 代 码 生 成 选 项 按 字 母 顺 序 列 出 表 3-2 代 码 生 成 选 项 选 项 操 作 -compat 设 置 编 译 器 的 主 发 行 版 本 兼 容 模 式 +e{0 1} 控 制 虚 拟 表 的 生 成 -g 用 于 与 调 试 一 起 使 用 的 编 译 -KPIC 生 成 位 置 独 立 的 代 码 -KPIC 生 成 位 置 独 立 的 代 码 -mt 编 译 和 链 接 多 线 程 代 码 -xcode=a (SPARC) 指 定 代 码 地 址 空 间 -xmerge (SPARC) 将 数 据 段 和 文 本 段 合 并 +w 标 识 会 产 生 不 可 预 料 结 果 的 代 码 3-2 C++ 用 户 指 南 2005 年 1 月