我知道c++ 11中至少有一个变化会导致一些旧代码停止编译:在标准库中引入显式操作符bool(),取代操作符void*()的旧实例。当然,这将破坏的代码可能是本来就不应该有效的代码,但它仍然是一个破坏性的更改:过去有效的程序不再有效。

还有其他重大变化吗?


当前回答

有很多关于隐式移动破坏向后兼容性的讨论

(有相关讨论的旧页)

如果你向下阅读注释,隐式move return也是一个突破性的变化。

其他回答

auto关键字的含义改变。

断改变?

嗯,首先,如果你使用decltype, constexpr, nullptr等作为标识符,那么你可能会遇到麻烦……

对容器库进行了大量更改,可以实现更高效的代码,但在一些极端情况下会默默地破坏向后兼容性。

例如,考虑std::vector、默认结构、c++ 0x和破坏性更改。

有很多关于隐式移动破坏向后兼容性的讨论

(有相关讨论的旧页)

如果你向下阅读注释,隐式move return也是一个突破性的变化。

struct x {
   x(int) {}
};

void f(auto x = 3) { }

int main() {
   f();
}

C++03:有效。

c++ 0x:错误:参数声明为auto