哪些Boost特性与C++;11? 几年前我把我的C++技巧放在书架上,现在看来,当我再次需要它们的时候,风景已经改变了。< /P>

哪些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)、对

我们现在有了C++11,我的理解是它与许多Boost特性重叠


有没有总结这些重叠的地方,哪些Boost库将成为遗留库,推荐使用哪些C++11特性来代替Boost特性,哪些最好不要

可由C++11语言功能或库替换

  • → 完美转发(带、和)
  • → 完美的转发(至少对于记录在案的用例)
  • → (在非多态性情况下)
  • → Lambda表达式
  • → ,
  • → 静态断言
  • → , 等(但检查)
  • → 自动,取消类型
  • → 列表初始化(§8.5.4/3)
  • → <代码>,请参见下面的列表
    • 伽马函数(tgamma)、对数伽马函数(lgamma)
    • 错误函数(erf、erfc)
    • log1p
      expm1
    • cbrt
      hypot
    • acosh
      asinh
      atanh
TR1(如果这些是TR1库,则在中标记)

  • → std::数组
  • → 绑定
  • → std::启用_if
  • → std::函数
  • → 标准::mem_fn
  • → 标准::参考
  • → std::unique\u ptr、std::shared\u ptr、std::weak\u ptr(但boost::intrusive\u ptr仍然无法替代)
  • (交换阵列)→ 交换
  • → std::tuple
  • → ,
从C++11向后移植的功能:

  • ← 原子的
  • ← (见下文)
  • ← 右值引用
可由C++17语言功能替换:

  • → std::string\u视图
  • → (文件系统TS)
  • → std::可选()
  • → 标准::任何(图书馆基础知识TS v1)
  • → <代码>(),请参见下面的列表
    • 贝塔函数
    • (正规/关联/球面)勒让德多项式
    • (正规/相关)勒让德多项式
    • 埃尔米特多项式
    • 贝塞尔(J/Y/I/K)函数(Y在C++中称为纽曼函数)
    • 球面贝塞尔(j/y)函数
    • (不完全/完全)椭圆积分(第一类/第二类/第三类)
    • 黎曼-泽塔函数
    • 指数积分
  • → std::variant()
标准团队仍在努力:

  • → 标准::实验::gcd,lcm(图书馆基础TS v2)
  • → 概念
  • → 射程
  • → 网络TS(仅限套接字和计时器)
  • → 数字
  • /→ 协同程序
可以使用可变模板来修剪或删除大部分内容。的一些常见用例可以替换为std::to_字符串和std::stoX


一些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仍然很有用。很好的列表,尽管我不相信
    std::unique\ptr
    是TR1的一部分(因为它需要移动语义)@ildjarn:Boost.Chrono提供的函数比.Boost.Exception多得多-只有N2179是相关的。@Nemo:Yes。只有std::tr1::shared_ptr是tr1的一部分,const std::unique_ptr替换了Boost::scoped_ptr和Boost::scoped_数组的用例