首页 >后端开发 >C++ >C 11 引入了哪些重大变化?

C 11 引入了哪些重大变化?

Patricia Arquette
Patricia Arquette原创
2024-12-11 14:43:10923浏览

What Breaking Changes Did C  11 Introduce?

C 11 中引入的重大更改

C 11 引入了几项重大更改,这些更改可能导致以前有效的代码在编译期间失败。一个显着的变化是在标准库中引入了显式运算符 bool(),替换了运算符 void*() 的实例。虽然此更改主要影响依赖隐式转换的无效代码,但它仍然构成重大更改。

核心语言更改

  • 关键字alignas、alignof、char16_t 、 char32_t、constexpr、decltype、noexcept、nullptr、static_assert 和 thread_local 是引入了。
  • 大于 long 的整数文字现在可以被视为有符号 long long,而不是无符号整数。
  • 除法现在总是向 0 舍入,与 C 2003 不同,C 2003 可能向负无穷舍入在某些情况下。
  • auto 关键字不能再用作存储类说明符,因为它是为新的存储类保留的功能。
  • 缩小转换范围会导致不兼容。例如,将 double 分配给 int 现在是无效的。
  • 当显式定义格式不正确时,隐式特殊成员函数将被定义为已删除,从而导致以前有效的代码出现错误。
  • 用户声明的析构函数有隐式异常规范(noexcept(true)),它可以在catch块中触发不同的行为。
  • export关键字不再是在 C 11 中有效。
  • 运算符>>现在可用于关闭两个模板,可能会影响使用序列 >> 的代码作为移位运算符。
  • 现在允许具有内部链接的函数的依赖调用。

库更改

  • 标准库C 11 中引入的标识符可能与用户定义的标识符冲突。
  • 标头包含引用 C 11 标准库中的新头文件可能无法编译。
  • 交换函数已从 移至到
  • posix 全局命名空间现已保留。
  • 宏 override、final、carrys_dependency 和 noreturn 不再有效。

以上是C 11 引入了哪些重大变化?的详细内容。更多信息请关注PHP中文网其他相关文章!

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