Skip to content

C++03 变更与修正

值初始化(Value Initialization)

C++03 明确了三种初始化语义:

cpp
int a;          // 默认初始化(对内置类型:不确定值)
int b = int();  // 值初始化(对内置类型:零初始化)→ b = 0
int c();        // 注意:这是函数声明!(最令人头疼的解析)

对于类类型:

cpp
struct Widget {
    int x;
    double y;
};

Widget w1;         // 默认初始化:调用默认构造函数
Widget w2 = Widget();  // 值初始化:先零初始化,再调用默认构造函数

模板两阶段名称查找

C++03 细化了模板中名称查找的两阶段规则:

  1. 第一阶段(模板定义时):查找非依赖名称
  2. 第二阶段(模板实例化时):查找依赖名称
cpp
template<typename T>
void foo(T t) {
    bar(t);        // 依赖名称 — 第二阶段查找
    baz();         // 非依赖名称 — 第一阶段查找
}

这确保了模板代码在定义时就能检测到一部分错误,而不需要等到实例化。

其他修正

  • std::allocator 的成员函数修正
  • 异常规范的行为细化
  • 若干库实现的缺陷报告修复

基于 MIT 许可发布