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