C 11 中引入的重大更改
C 11 引入了一些可能影响现有代码的编译和行为的重大更改。
核心语言更改:
-
运算符重载: 标准库中显式运算符 bool() 的引入取代了旧的运算符 void*() 实例。此更改可能会破坏以前依赖于布尔值隐式转换的代码。
-
关键字添加:现在可以使用新关键字,例如alignas、constexpr和nullptr,并且可能与以前有效的标识符。
-
整数文字:某些整数文字可能会更改类型从无符号整数变为有符号 long long,导致计算中存在潜在错误。
-
除法舍入:无论是否使用浮点类型,整数除法现在始终向 0 舍入。
-
隐式构造函数定义:现在删除了一些隐式构造函数定义,使以前调用它们的代码有效无效。
-
隐式异常规范:用户声明的析构函数现在具有隐式异常规范,这可能会影响异常处理行为。
-
依赖函数调用: 现在允许具有内部链接的函数的依赖调用,从而改变某些函数调用的分辨率
库更改:
-
标头冲突: 新的标准库标头可能与名称相似的现有标头冲突,例如和 。
-
保留命名空间: posix 全局命名空间现在保留用于标准化,这会引发之前在此命名空间中定义标识符的代码的问题。
-
宏冲突: 为 override、final、carrys_dependency 和 noreturn 定义的宏现在是在 C 11 中无效,可能会影响使用这些宏的代码。
值得注意的是,虽然这些更改很重要,但许多更改是有意为之,旨在提高语言的健全性和一致性。程序员应该检查他们的代码库,识别重大更改,并进行适当的修改以确保与 C 11 的兼容性。
以上是C 11 给现有代码带来了哪些重大变化?的详细内容。更多信息请关注PHP中文网其他相关文章!