根据 Reddit C++ 版块上的信息,C++ 20 已经正式通过委员会草案,这意味着 C++ 20 可以准备发布。
“在近期 ISO C++ 委员会会议上,我们完成了 C++ 20 委员会草案,并投票决定将国际标准草案(DIS,Draft International Standard)发送出去,以进行最终批准和发布”,帖子介绍:“在程序上,DIS 可能会被拒绝,但是由于我们的程序和过程,这种情况极不可能发生。这意味着 C++ 20 已经完成,并将在几个月后发布该标准。”
C++ 20 是近十年来影响最大的一个版本,新的特性众多,包括:
- 模组(Modules)
- 协程(Coroutines)
- 标准库 Concepts 的概念
- 范围(range)
constexpr
支持:new
/delete
、dynamic_cast
、try
/catch
、虚拟constexpr
向量和字符串- 计时:日历、时区支持
std::format
std::span
std::jthread
预计这些新特性将会对开发者及 C++ 生态产生不小影响,特别是像协程这种巨大的变化。
同时,在此次会议期间,委员会还通过了 C++ 23 计划,其中包括优先考虑模块化标准库、对协程、执行程序和网络的库支持。
更加具体的内容可以查看原帖:
https://www.reddit.com/r/cpp/comments/f47x4o/202002_prague_iso_c_committee_trip_report_c20_is
module能不能完全替代header only?
先不说增加编译速度的问题。
我对“非header only”的库简直深恶痛绝。
第一:因为非header only,所以就得编译,这时你就得看这个库的编译说明,编译完后,当总项目编译选项发生变化了,这个库你又得重新编译,有的库光看编译说明就够你喝一壶的。
第二:你可以选择把库中的cpp文件添加到项目中,但当cpp文件的目录结构非常多非常复杂时,这个办法几乎没有可操作性。
如果说header only的库增加了编译时间,我宁可选择增加编译时间去喝口茶,也不要搞那么多复杂的操作步骤,其实这个过程对C++新手尤其不友好,真是的把C++门槛搞复杂了。
所以我想问一下:有了module之后,库中(比如写个开源库之类)还有没有cpp文件,如果有的话,可不可以类似header only一样,直接import就行了,不用管库里的cpp文件了,不用再单独编译了,也不用再把cpp文件添加到项目中了?
现在比较麻烦的事情是,*nix的软件管理器顺带管理着各种各样的库,不知道到时候会不会出现冲突问题
有了Modules后,才有可能构建C++版本的maven或者javascript的npm这些包管理工具,现在慢慢云编码了。
“再也不看c++的书了”
不过C++20的书有一本可以看,C++之父Bjarne Stroustrup说过会为C++20专门更新《C++语言程序设计》,以现代编程语言的角度去写,值得一阅。
而且关键影响后续新人的加入
想学的话,不用跟语言专家一样清楚那一大堆标准文案,起码大体了解下没啥太难吧。
然后,既然你想说17就说说17。虽然17还远不如11普及吧,能用的场合还是很香的。
类模板参数推导,不用每个地方每次都写一遍模板参数,它不香?
结构化绑定,STL容器遍历遇到pair每次不用写名字显不出含义的p->first p->second,它难道不实用?
新属性上,[[fallthrough]]、[[nodiscard]],编译器更好地警告,防止猪队友它不香?
还是语言自带utf-8字符支持不符合时代需求了?
还有折叠表达式,处理可变参数写库的用得多他不,比c年代的va_arg宏易用?
i=sin(i);
});
C++之前这都得用PPL或者TBB
你们觉得rust难,是因为c++就是这样的.