C 11 中的重大更改
C 11 引入了可能影响现有代码编译的重大更改,包括以下内容:
核心语言
- 在标准库中引入显式运算符 bool(),替换运算符 void*() 的实例。此更改可能会导致之前依赖隐式转换的代码无法编译。
- 新关键字,包括alignas、alignof、char16_t、constexpr和nullptr,可能与不遵循命名约定的代码中的现有标识符发生冲突.
- 整数除法的行为已更改,因为 C 11 始终将结果舍入到 0,而 C 03 允许舍入到结果0 或负无穷大。
- 隐式声明的特殊成员函数(例如构造函数或析构函数)现在被定义为已删除(如果它们的隐式定义格式不正确),这可能会导致代码在某些上下文中使用这些函数变得无效。
- 用户声明的析构函数具有隐式异常规范,这意味着它们不能抛出异常。依赖析构函数抛出异常的代码可能需要修改。
- 现在允许对具有内部链接的函数进行依赖调用,这可能会改变模板中重载函数的解析。
库更改
- 添加到 C 标准库的标识符C 11 可能与使用同名标头的代码中的现有标识符发生冲突。
- 交换函数已从 中移出。 的标头标头。包含 的代码可能需要更新以包含 相反。
- 全局命名空间 posix 现在保留用于标准化。在此命名空间中定义标识符的代码可能需要修改。
- 名为 override、final、carrys_dependency 或 noreturn 的宏在 C 11 中无效。定义这些宏的代码可能需要更新。
以上是将代码迁移到 C 11 时我应该注意哪些重大更改?的详细内容。更多信息请关注PHP中文网其他相关文章!