首页 >后端开发 >C++ >将代码迁移到 C 11 时我应该注意哪些重大更改?

将代码迁移到 C 11 时我应该注意哪些重大更改?

Susan Sarandon
Susan Sarandon原创
2024-12-24 17:19:28487浏览

What Breaking Changes Should I Be Aware Of When Migrating Code to C  11?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn