几年前,我把我的 C++ 技能束之高阁,现在看来,当我再次需要它们时,情况已经发生了变化。
我们现在有了 C++11,我的理解是它重叠了许多 Boost 功能。
是否有一些总结,这些重叠在哪里,哪些 Boost 库将成为遗产,建议使用哪些 C++11 功能而不是 boost 功能,哪些最好不使用?
可被 C++11 语言功能或库替换
-
Foreach → 基于范围的
-
功能/前锋→ 完美转发(有右值引用, 可变参数模板 and 标准::转发)
-
就地工厂、打字就地工厂→ 完美转发(至少对于记录的用例而言)
-
Lambda → 拉姆达表达式(在非多态情况下)
-
本地功能→ Lambda 表达式
-
Min-Max → std::最小最大, std::minmax_element
-
Ratio → 标准::比率
-
静态断言→ 静态断言
-
Thread→ 等(但检查这个问题).
-
Typeof→ 自动、decltype
-
值已初始化→ 列表初始化 (§8.5.4/3)
-
Math/Special Functions →
<cmath>
, see the list below
- 伽玛函数(tgamma)、对数伽玛函数(lgamma)
- 误差函数(erf、erfc)
-
log1p
, expm1
-
cbrt
, hypot
-
acosh
, asinh
, atanh
TR1(它们被标记在文档如果那些是 TR1 库)
-
Array→ std::数组
-
Bind→ std::绑定
-
启用如果→ std::enable_if
-
Function→ std::函数
-
会员功能→ std::mem_fn
-
Random→
-
Ref→ std::ref,标准::cref
-
Regex→
-
的结果 → std::结果
-
智能指针→ std::unique_ptr、std::shared_ptr、std::weak_ptr(但 boost::intrusive_ptr 仍然无法替换)
-
Swap(交换数组)→ std::swap
-
Tuple→ std::元组
-
类型特征→
-
无序→ ,
从 C++11 向后移植的功能:
-
Atomic← std::原子
-
Chrono← (见下文)
-
Move← 右值参考
可被 C++17 语言功能替代:
-
字符串引用→ std::string_view
-
文件系统 → (文件系统 TS)
-
Optional→ std::可选 (库基础知识 TS v1)
-
Any→ std::any(库基础知识 TS v1)
-
Math/Special Functions →
<cmath>
(Special Math IS), see the list below
- 贝塔函数
- (法线/关联/球面)勒让德多项式
- (正态/相关)勒让德多项式
- 埃尔米特多项式
- Bessel(J/Y/I/K)函数(Y在C++中称为Neumann函数)
- 球面贝塞尔 (j / y) 函数
- (第一类/第二类/第三类)的(不完全/完全)椭圆积分
- 黎曼zeta函数
- 指数积分Ei
-
Variant→ std::变体 (P0088R2)
标准团队仍在研究中:
-
数学公因数→ std::experimetal::gcd、lcm(库基础知识 TS v2)
-
概念检查→ 概念 TS
-
Range→ 范围 TS
-
Asio→ 网络 TS(仅限套接字和定时器)
-
多精度→ 数值 TS
-
协程/协程2→ 协程 TS
很大一部分MPL可以使用可变参数模板进行修剪或删除。一些常见的用例词汇转换可以用 std::to_string 和 std::stoX 替换。
一些 Boost 库与 C++11 相关,但也有更多扩展,例如Boost.Functional/Hash包含哈希合并以及 C++11 中未找到的相关函数,Boost.Chrono有 I/O 和舍入以及许多其他时钟等。因此,在真正放弃它们之前,您可能仍然想看看升压时钟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)