C++03 标准详解:C++98的技术修订版

C++03(ISO/IEC 14882:2003)是C++98的一个技术修订版本,正式名称为"C++ Programming Language, Second Edition"。它主要修正了C++98标准中的一些缺陷和模糊之处,没有引入重要的新特性,但澄清了许多语言细节。

一、C++03相较于C++98的主要变化

1. 标准库修正与澄清

容器成员函数异常安全性保证
std::vector<int> v;
v.push_back(1);  // 明确规定了基本异常安全保证
流状态处理更明确
std::ifstream file("data.txt");
if (!file) {  // 流状态检查更规范
    // 错误处理
}

2. 模板相关澄清

模板定义点规则
template<typename T>
void f(T);  // 声明

template<typename T>
void f(T t) {  // 定义
    // 实现
}
模板友元声明
template<typename T>
class Foo {
    friend void bar(Foo<T>);  // 友元声明更明确
};

3. 初始化列表澄清

数组初始化
int a[] = {1, 2, 3};  // 初始化语法更规范
静态成员初始化
class Widget {
    static const int size = 10;  // 允许类内初始化整型静态常量
};

4. 异常规范调整

不推荐使用动态异常规范
void func() throw(std::exception);  // 不推荐但保留

二、标准库的微小改进

1. 新增标准库头文件

#include <cstdint>  // 提供固定宽度整数类型

2. 值初始化语法

int* p = new int();  // 值初始化为0
int* q = new int;    // 默认初始化(未初始化)

3. 导出模板(export)的模糊处理

// export template<typename T> void f(T);  // 实现困难,多数编译器不支持

三、与C99的兼容性

1. 新增C99兼容头文件

#include <cstdbool>  // bool宏定义
#include <cstdint>   // 固定宽度整数类型

2. 预定义宏

__STDC_HOSTED__  // 指示是否在宿主环境中实现

四、其他技术修正

1. 类型定义一致性

typedef std::vector<int> IntVector;  // 使用更一致

2. 模板特化规则

template<>
class Widget<int> {  // 特化规则更明确
    // 特化实现
};

3. 名称查找规则

namespace N {
    int x;
}
int x;
using namespace N;
x = 1;  // 错误,歧义(比C++98更明确)

五、总结

C++03的主要变化:

  1. 缺陷修复:修正了C++98标准中的约100处问题
  2. 标准库澄清:明确了容器、流等组件的具体行为
  3. 模板规范:完善了模板相关规则和特化机制
  4. 兼容性增强:部分采纳了C99的特性
  5. 语法一致性:统一了初始化等语法规则

虽然C++03没有引入引人注目的新特性,但它为C++语言的稳定性和可移植性做出了重要贡献,为后续C++11的重大变革奠定了基础。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐