首页 >后端开发 >C++ >迁移到 C 11 时我应该注意哪些重大变化?

迁移到 C 11 时我应该注意哪些重大变化?

Susan Sarandon
Susan Sarandon原创
2024-12-23 16:41:16681浏览

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

C 11 中引入了哪些重大更改?

C 11 中引入的重大更改之一是显式运算符 bool()标准库,替换运算符 void*() 的实例。虽然此更改应该解决无效代码,但还需要考虑其他潜在的重大更改。

核心语言不兼容性

  • 修改的字符串文字解释: 像“u8”这样的预定义宏可能会修改字符串文字。
  • 用户定义的字符串文字: 字符串文字中的“_x”现在创建用户定义的字符串文字,而不是扩展宏。
  • 新关键字: 引入“constexpr”和“thread_local”等关键字可能会破坏现有标识符
  • 整数文字修改:超过“long”范围的整数文字现在可能会变成“long long”。
  • 整数除法修改: C 03 整数除法舍入行为可能与 C 11 的舍入行为不同0.
  • “auto”作为存储说明符:使用“auto”作为存储说明符的 C 03 代码可能会无效。
  • 缩小转换: C 03 缩小转换(例如,double 到 int)现在可以是无效。
  • 隐式特殊成员函数删除: 格式错误的隐式定义成员函数将被自动删除。
  • 析构函数异常规范: 用户-声明的析构函数现在具有隐式 noexcept(true)
  • “导出”声明消除:使用“导出”的 C 03 声明现在无效。
  • 模板关闭修改:“> >” in 模板现在可以关闭两个模板,而不是仅被视为移位运算符。
  • 内部链接函数的依赖调用: 现在允许内部链接函数的依赖调用。

图书馆修改

  • 命名空间标识符:添加到标准库的标识符可能会破坏现有代码。
  • 标头包括:之前的标头位于某些标准标头中(例如,
  • “posix”命名空间:“posix”命名空间现在保留用于将来的标准化。
  • 宏定义: 将“override”、“final”、“carries_dependency”或“noreturn”定义为宏现在可能无效。

以上是迁移到 C 11 时我应该注意哪些重大变化?的详细内容。更多信息请关注PHP中文网其他相关文章!

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