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