你需要了解的 C++ 17 Top 19 新特性 - 开源中国社区
你需要了解的 C++ 17 Top 19 新特性
局长 2017年05月24日

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

局长 局长 发布于2017年05月24日 收藏 32 评论 43

什么是 C++17?

C++17(或 C++1z)是继 C++14 之后 C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称。C++17 现在功能已齐全,正在成为国际标准的路上。它的规范已于 2017 年 3 月达到国际标准草案的阶段。

C++17 标准化图表

年份C++ 标准正式名称
1998ISO/IEC 14882:1998C++98
2003ISO/IEC 14882:2003C++03
2011ISO/IEC 14882:2011C++11
2014ISO/IEC 14882:2014C++14
2017Yet to be determinedC++17
2020Yet to be determinedC++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

来自:http://www.masalaanews.com/

>>>【全民狂欢,评论有礼】5月15日-31日评论每日更新的“新闻资讯和软件更新资讯”,评论点赞数超过 20 的可登上每周更新的“源资讯”和“软件周刊”两大栏目,点赞数超过 50 的还将获得 5 活跃积分奖励和开源中国定制好礼。详情

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:你需要了解的 C++ 17 Top 19 新特性
分享
评论(43)
精彩评论
16
C++委员会真的觉得C++的特性还不都多吗?
13
C++越来越脚本化的语法,同时又能兼顾性能,跨越层层抽象达到原生性能,是好事。
只要学好了模板编程,心智负担其实是不存在的,从C++11开始一个重要任务就是降低各种模板编程的难度。
根据你的领域,裁剪你需要的特性,不存在适应所有领域的银弹,它也不是万能的。
作为靠C++吃饭7年的程序员,表示新特性指在降低语言使用难度,学习成本很低(如果有长期使用boost的经历,几乎零成本)。
7
C++不缺特性,已经足够多了;
还是多认证些库吧。比如说网络库什么的。不要一味的去追求特性,却没有可用的东西,全要自己写。
6
从入门到放弃
3
要有计划地多掌握几门语言,只会用一门语言的,没资格评论语言!
语言就是个工具,应该根据场景,选择最适合的工具。
过于坚持某一种语言的,只会给自己和公司找麻烦!
最新评论
0

引用来自“knull”的评论

C++不缺特性,已经足够多了;
还是多认证些库吧。比如说网络库什么的。不要一味的去追求特性,却没有可用的东西,全要自己写。
C++的网络库满大街都是啊,有很多都很好用,只是没有成为标准而已。
0
工作了不是直接调用模板吗,还要学那么多特性?
0
utf-8 终于标准支持了
2
人家的语言,想增啥就增啥,人家说了算。
2
学c++的付出 找工作的难度 薪资的报酬
学java/前端/php的付出 找工作的难度 薪资的报酬
两个一比,一目了然
2

引用来自“AutoPlus”的评论

有 C++ 的地方就有 Bug

引用来自“无聊的人啊”的评论

哈哈,你玩不转就说别人不好?哈哈.
Linus 看了你一眼,说你是个 bullshit
0

引用来自“knull”的评论

C++不缺特性,已经足够多了;
还是多认证些库吧。比如说网络库什么的。不要一味的去追求特性,却没有可用的东西,全要自己写。
说的没错,acl 就是这样的库:https://git.oschina.net/zsxxsz/acl/tree/master
0
C++很好,但是我在用python和golang
0
2098年的叫啥?
0
c++11还没用上,这已经17了。。。
0

引用来自“AutoPlus”的评论

有 C++ 的地方就有 Bug

引用来自“无聊的人啊”的评论

哈哈,你玩不转就说别人不好?哈哈.
事实上是,有人的地方就有BUG,BUG
0

引用来自“flywuya”的评论

C++越来越脚本化的语法,同时又能兼顾性能,跨越层层抽象达到原生性能,是好事。
只要学好了模板编程,心智负担其实是不存在的,从C++11开始一个重要任务就是降低各种模板编程的难度。
根据你的领域,裁剪你需要的特性,不存在适应所有领域的银弹,它也不是万能的。
作为靠C++吃饭7年的程序员,表示新特性指在降低语言使用难度,学习成本很低(如果有长期使用boost的经历,几乎零成本)。
感觉C++正在逐渐添加现代语言的一些特性,降低难度,毕竟基础太庞大,如果现代语言找不到合适的应用场景,很难超越了。
6
从入门到放弃
3
要有计划地多掌握几门语言,只会用一门语言的,没资格评论语言!
语言就是个工具,应该根据场景,选择最适合的工具。
过于坚持某一种语言的,只会给自己和公司找麻烦!
0

引用来自“徐郑”的评论

不知道asio网络部分什么时候能加进来,这样就不需要第三方网络库了

引用来自“米饭001”的评论

asio新版,c++11.只需要header inclule就行了,不依赖boost挺好的
但还不是官方的,需要自己再下载安装
0
发的
0
加的都是没有用的,二进制接口兼容等都没有。
0

引用来自“AutoPlus”的评论

有 C++ 的地方就有 Bug
哈哈,你玩不转就说别人不好?哈哈.
0

引用来自“徐郑”的评论

不知道asio网络部分什么时候能加进来,这样就不需要第三方网络库了
asio新版,c++11.只需要header inclule就行了,不依赖boost挺好的
0
擦屁屁
顶部