微信号:cppFans

介绍:伯乐在线旗下账号,「CPP开发者」专注分享 C/C++ 开发相关的技术文章和工具资源.

你需要了解的 C++ 17 Top 19 新特性

2017-05-24 16:56 CPP开发者

(点击上方公众号,可快速关注)


编译:开源中国-局长 , 英文:masalaanews
如有好的文章投稿,请点击 → 这里查看详情



什么是 C++17?


C++17(或 C++1z)是继 C++14 之后 C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称。C++17 现在功能已齐全,正在成为国际标准的路上。它的规范已于 2017 年 3 月达到国际标准草案的阶段。详情请看我们之前的文章:《C++ 17 标准制定工作已完成》。


C++17 标准化图表


年份         C++ 标准                        正式名称

1998 ISO/IEC 14882:1998 C++98

2003 ISO/IEC 14882:2003 C++03

2011 ISO/IEC 14882:2011 C++11

2014 ISO/IEC 14882:2014 C++14

2017 Yet to be determined C++17

2020 Yet to be determined C++20


C++17 的 19 个新特性


  1. 使 static_assert 的文本信息可选

  2. 删除 trigraphs

  3. 在模板参数中允许使用 typename(作为替代类)

  4. 来自 braced-init-list 的新规则用于自动推导

  5. 嵌套命名空间的定义,例如:使用 namespace X::Y { … } 代替 namespace X { namespace Y { … }}

  6. 允许命名空间和枚举器的属性

  7. 新的标准属性:[[fallthrough]], [[maybe_unused]] 和 [[nodiscard]]

  8. UTF-8 字符文字

  9. 对所有非类型模板参数进行常量评估

  10. Fold 表达式,用于可变的模板

  11. A compile-time static if with the form if constexpr(expression)

  12. 结构化的绑定声明,现在允许 auto [a, b] = getTwoReturnValues();

  13.  if 和 switch 语句中的初始化器

  14. 在某些情况下,确保通过编译器进行 copy elision(Guaranteed copy elision by compilers in some cases)

  15.  一些用于对齐内存分配的扩展

  16. 构造函数的模板推导,允许使用 std::pair(5.0, false) 代替 std::pair<double,bool>(5.0, false)

  17. 内联变量,允许在头文件中定义变量

  18. __has_include,允许由预处理程序指令检查头文件的可用性

  19. __cplusplus 的值更改为 201703L



看完本文有帮助?请分享给更多人

关注「CPP开发者」,提升C/C++技能

 
CPP开发者 更多文章 写给 Git 初学者的7个建议 向 Linus 学习,让代码具有 good taste Git 版本控制与工作流 编程语言 5 月排行榜:Java 和 C 下跌厉害 一些鲜为人知的编程真相
猜您喜欢 设计模式暂时可以不需要掌握,但这几个原则一定要熟记! Thoughtworks 的程序员的读书雷达 【C语言探索之旅】 第一部分第十课:练习题+习作 15个实用的PHP正则表达式 小钢的架构思考:什么是架构