哪些Boost特性与C++;11? 几年前我把我的C++技巧放在书架上,现在看来,当我再次需要它们的时候,风景已经改变了。< /P>
我们现在有了C++11,我的理解是它与许多Boost特性重叠哪些Boost特性与C++;11? 几年前我把我的C++技巧放在书架上,现在看来,当我再次需要它们的时候,风景已经改变了。< /P>,c++,boost,c++11,C++,Boost,C++11,我们现在有了C++11,我的理解是它与许多Boost特性重叠 有没有总结这些重叠的地方,哪些Boost库将成为遗留库,推荐使用哪些C++11特性来代替Boost特性,哪些最好不要 可由C++11语言功能或库替换 → → 完美转发(带、和) → 完美的转发(至少对于记录在案的用例) → (在非多态性情况下) → Lambda表达式 → , → → 静态断言 → , 等(但检查) → 自动,取消类型 → 列表初始化(§8.5.4/3) → ,请参见下面的列表 伽马函数(tgamma)、对
有没有总结这些重叠的地方,哪些Boost库将成为遗留库,推荐使用哪些C++11特性来代替Boost特性,哪些最好不要 可由C++11语言功能或库替换
- → 李>
- → 完美转发(带、和)
- → 完美的转发(至少对于记录在案的用例)
- → (在非多态性情况下)
- → Lambda表达式
- → , 李>
- → 李>
- → 静态断言
- → , 等(但检查)
- → 自动,取消类型
- → 列表初始化(§8.5.4/3)
- → <代码>,请参见下面的列表
- 伽马函数(tgamma)、对数伽马函数(lgamma)
- 错误函数(erf、erfc)
,log1p
expm1
,cbrt
hypot
,acosh
,asinh
atanh
- → std::数组
- → 绑定
- → std::启用_if
- → std::函数
- → 标准::mem_fn
- → 李>
- → 标准::参考
- → 李>
- → 李>
- → std::unique\u ptr、std::shared\u ptr、std::weak\u ptr(但boost::intrusive\u ptr仍然无法替代)
- (交换阵列)→ 交换
- → std::tuple
- → 李>
- → , 李>
- ← 原子的
- ← (见下文)
- ← 右值引用
- → std::string\u视图
- → (文件系统TS)
- → std::可选()
- → 标准::任何(图书馆基础知识TS v1)
- → <代码>(),请参见下面的列表
- 贝塔函数
- (正规/关联/球面)勒让德多项式
- (正规/相关)勒让德多项式
- 埃尔米特多项式
- 贝塞尔(J/Y/I/K)函数(Y在C++中称为纽曼函数)
- 球面贝塞尔(j/y)函数
- (不完全/完全)椭圆积分(第一类/第二类/第三类)
- 黎曼-泽塔函数
- 指数积分
- → std::variant()
- → 标准::实验::gcd,lcm(图书馆基础TS v2)
- → 概念
- → 射程
- → 网络TS(仅限套接字和计时器)
- → 数字
- /→ 协同程序
一些Boost库与C++11相关,但也有一些扩展,例如C++11中未找到的包含函数和相关函数,具有I/O和舍入以及许多其他时钟等。因此,在真正放弃它们之前,您可能仍然希望查看Boost库。实际上,我认为boost库不会成为遗产 是的,您应该能够使用
std::type_-traits
,regex
,共享_-ptr
,唯一_-ptr
,tuple
,std::tie
,std::begin
而不是Boost-Typetraits/Utility,Boost-Smartpointer,Boost-tuple,Boost-Range库,但实际上,除非您将更多的代码移到c++11,否则就不需要“切换”
另外,根据我的经验,大多数的std
版本都没有那么有特色。例如,该标准没有
- Perl5正则表达式
- 打电话给你
- 某些正则表达式接口成员(如
)和其他接口差异boolboost::basic_regex::empty()
- 因为Boost接口与boostxpressive完全匹配,所以这会带来更多麻烦
- 它与Boost字符串算法配合得更好 显然,后者还没有标准的对应物(还没有?)
- 与TMP(助推聚变)有关的许多事情
- 懒惰的、基于表达式模板的lambdas;与C++11相比,它们有着不可避免的好处,因为它们现在可以是多态的。因此,它们通常可以更加简洁:
std::vector<int> v = {1,2,-9,3}; for (auto i : v | filtered(_arg1 >=0)) std::cout << i << "\n"; // or: boost::for_each(v, std::cout << _arg1);
std::vector v={1,2,-9,3}; 用于(自动i:v |过滤(_arg1>=0))
CoutBoost是最早实现TR1库的人之一。既然现在已经在标准中了,您应该更喜欢标准版本。Boost.Lambda现在也被实际的Lambda取代了。C++11上的文章对大多数更改都有一个很好的总结。添加到列表中,并且。注意Boost.Lambda(或者更确切地说,Boost.Phoenix的Lambda)对于多态Lambda仍然很有用。很好的列表,尽管我不相信
是TR1的一部分(因为它需要移动语义)@ildjarn:Boost.Chrono提供的函数比.Boost.Exception多得多-只有N2179是相关的。@Nemo:Yes。只有std::tr1::shared_ptr是tr1的一部分,const std::unique_ptr替换了Boost::scoped_ptr和Boost::scoped_数组的用例std::unique\ptr