网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

C++17中,Boost的哪些特性在新的标准中得到了应用?

GG网络技术分享 2026-04-15 12:29 0


C++17中,Boost的哪些特性在新的标准中得到了应用?一场关于标准与混乱的深度剖析

我倾向于... 哎呀,说到C++17,大家是不是觉得头都大了?这年头,标准更新得比我家楼下的公交车还快。Boost库,那个庞然大物,简直就是C++界的瑞士军刀,什么都有。但是你知道吗?C++17这个新标准,其实就像个贪婪的小偷,把Boost里好多好东西都偷过去,变成了自己的。这事儿吧,说好也好,说坏也坏,反正就是让人又爱又恨。今天咱们就来聊聊这个乱七八糟的话题,顺便看看这里面到底有多少猫腻。

工程建设标准实施重要性分析 :北京奥运会给世人留下了深刻的印象,从完善的场馆设施到环境的有效改善、 从组织严谨的安保措施到便捷有序的交通系统、从管理科学的食品供给到出色的生活服务等,都获得了与会各国运动员、官员、新闻媒体及各界人士的由衷赞叹。 靠谱。 你看,连奥运会都有标准,C++怎么能没有标准呢?但是C++的标准有时候就像那个奥运会的交通系统,看着挺有序,其实吧你一进去就迷路了。Boost就是那个在迷路中给你指路的导游,现在好了导游直接变成了路标,你说这事儿闹的。

Boost 在C++17的体现 :熟悉的特性在新标准的应用

1. 文件系统:从Boost.Filesystem到std::filesystem

这绝对是C++17里最重磅的更新之一!以前咱们操作文件系统, 要么用那个又臭又长的C风格API,要么就得依赖Boost.Filesystem。现在好了std::filesystem横空出世。但是说实话,这玩意儿用起来还是有点别扭。就像切缝机要由熟悉机械性能的工人进行操作,操作者要用力均匀,保证切缝深度均匀一致.河北不发火细石混凝土——##有限公司 质检总局今年将依据新标准加强对相关生产、销企业的检查,一旦发现不合格产品,将坚决予以封杀,掉链子。。

你看,操作文件系统也得像切缝机一样,用力均匀,不然一不小心就把你的硬盘给切坏了。虽然std::filesystem进了标准, 但是各个编译器的支持程度还不一样,这就好比质检总局还没检查完,市面上还是有很多不合格产品在流通。

咱们来看看这个对比表格, 心里大概就有数了这标准化的路还有多长:

特性/库 Boost版本状态 C++17标准状态 用户吐槽指数
文件系统操作 Boost.Filesystem std::filesystem ★★★★★
智能指针 Boost.SmartPtr std::shared_ptr等 ★★☆☆☆
任意类型 Boost.Any std::any ★★★★☆
变体类型 Boost.Variant std::variant ★★★☆☆

2. 类型平安的容器:std::optional, std::any, std::variant

这三个东西,简直就是Boost里的三剑客!以前我们写函数,有时候想返回个“空值”,要么用指针,要么抛异常,要么搞个奇怪的Tuple。现在有了std::optional,世界清静了。但是这玩意儿真的那么好用吗?我看未必。此前,标准对于每份食品的质量或体积没有统一规定,由企业根据产品特性或者推荐食用量自行决定.比如,可以使用消费者熟悉的油和盐替代脂肪和钠,... 这就像std::optional, 火候不够。 它里面有没有值,全看你怎么决定,标准没规定你必须塞进去什么。你可以塞个int, 也可以塞个string,就像食品里用油和盐替代脂肪和钠一样,看着挺健康,其实吧全是套路。

再说说std::variant, 这东西比Boost.Variant强多了至少它不会让你访问错误的类型而不报错。但是那个std::visit的写法,简直反人类!写个lambda写得手抽筋。长时间使用C++的程序员也都熟悉了C++毛孔里每一个特性,甚至是现实上的一些细微的区别,比如各种编译器对C++ 的区别,也都熟稔于心.即使是古老的语言,也通过了制定新标准,开始支持面向对象编程.当然,C++11中也有局部的创新,比如lambda函数的引入,以及原子类型的设计等,都体现了语言与时俱进的活力。但是这种活力有时候让我们这些老程序员累得够呛,为了学这些新特性,头发都掉光了,差点意思。。

这里有个关于这些类型容器的详细功能对比, 大家凑合看:

类型 主要功能 Boost前辈 适用场景
std::optional 可能不存在的值 Boost.Optional 可选的返回值,配置项
std::any 任意类型的类型平安容器 Boost.Any 动态类型传递,解耦
std::variant 类型平安的联合体 Boost.Variant 状态机,解析树
std::string_view 字符串的非拥有视图 Boost.StringRef 避免字符串拷贝,高性能

3. 字符串视图:std::string_view的崛起

摆烂。 这个真的是神器!以前我们传字符串,要么传std::string,要么传const char*。现在std::string_view一出,谁与争锋?它就像那个智能突破,未来主动进气格栅--美观实用的530 LE标准主动进气格栅与蓝色装饰条的结合,不仅体现了新能源汽车的特性,而且在车辆启动时,蓝色格栅... 哎呀,又串台了。我是想说std::string_view就像那个主动进气格栅,美观又实用。它不拥有数据,只是个视图,性能提升那是杠杠的。但是千万小心生命周期问题!如果你引用的字符串销毁了 string_view就变成了悬空指针,那时候你的程序就会像新能源汽车没电了一样,趴窝不动。

4. 其他杂七杂八的更新

C++17里还有很多从Boost那边借鉴过来的小玩意儿, 比如std::clamp,还有一些数学上的常量。将原3.11系统质量因素与3.10计算机资源需求的顺序进行了互换,并将系统质量因素改为其他质量特性需求;.修订版增强了文档的清晰性和实用性,体现了软件工程化流程和自主可控的要求。这话说得太官方了其实就是把以前乱七八糟的函数整理了一下让文档稍微能看懂点。Boost库里的Math库那可是相当强大, C++17只抄了一点点皮毛,就像那个文档修订一样,虽然增强了清晰性,但离自主可控还差得远呢。

有用御宅暴君2015-10-22 18:30:15最好的 C++ 入门教材,有与时俱进的 C++11 特性,翻译我很满意。.顺便看了下C++14/17,感觉着十几年其为新手来说还是简化了很多,虽说让C++丢掉一些历史包袱,也许就不是C++啦,但还是建议出一本只按照最新标准的讲解C++的 新 入门书,凡是有新标准的,原来旧有的东东就不要讲啦!!!,要我说...。

无语了... 这位御宅暴君说出了我的心声啊!C++的历史包袱太重了Boost就是那个最大的包袱之一。现在C++17把Boost的一部分变成了标准, 就像是把包袱里的东西拿出来洗了洗,重新包装了一下变成了“新标准”。但是 那些旧有的东东,比如那些奇奇怪怪的宏定义,那些为了兼容C++98而留下的烂代码,什么时候才能彻底扔掉呢?

5. :Boost在C++17的体现 :熟悉的特性在新标准的应用

总的 C++17这次更新,虽然说是“新标准”,但其实大部分都是“旧酒装新瓶”。Boost 在C++17的体现 :熟悉的特性在新标准的应用。C++新特性11/14/17/20/23/26学习计划安排。 太魔幻了。 你看,这都排到2026年了学习计划都安排不过来。我们这些程序员,就像是在跑步机上跑步的仓鼠,标准更新得越快,我们跑得越快,却还在原地踏步。

我裂开了。 本文展示一些久经考验的特性,这些特性来自著名的Boost库,引入到C++ 17中.C++的新标准中有很多元素是从Boost中迁移过来的.Boost库提供了大量标准库中没有的方便算法、类型和特性。这句话说得没错,Boost就是C++的试验田。好的东西, 比如智能指针、正则表达式、文件系统,都被收割进了标准;不好的东西,或者太复杂的东西,比如Graph库、Python库,就还在Boost里自生自灭。

再说说 我想说的是不管标准怎么变,不管Boost怎么被收割,我们写代码的人,最重要的是要把基础打牢。就像那个切缝机操作工一样,要熟悉机械性能,用力均匀。不要一看到新特性就往上堆,再说说搞出一堆不伦不类的代码。C++17里的这些Boost特性,用好了是神器,用不好就是炸弹。大家且行且珍惜吧,欧了!!

下面再给个表格, 看看这些特性在不同编译器里的支持情况,免得大家踩坑:,绝了...

编译器 std::filesystem std::optional std::string_view 推荐指数
GCC 9+ 完全支持 完全支持 完全支持 ★★★★★
Clang 7+ 完全支持 完全支持 完全支持 ★★★★★
MSVC 2017/2019 部分支持 完全支持 完全支持 ★★★★☆
老古董编译器 别想了 别想了 别想了 ☆☆☆☆☆

好了废话不多说了大家赶紧去升级编译器,体验C++17带来的“Boost”快感吧!虽然有时候真的很想砸键盘,但这就是C++的魅力所在啊,痛并快乐着!


提交需求或反馈

Demand feedback