几年前我把我的C++技能放在架子上,现在看来,当我再次需要它们时,景观已经改变了.
我们现在有了C++ 11,我的理解是它与许多Boost功能重叠.
是否存在这些重叠的摘要,哪些Boost库将成为遗产,推荐哪些C++ 11功能使用而不是增强哪些,哪些更好?
ken*_*ytm 279
可由C++ 11语言功能或库替换
<cmath>,请参阅下面的列表
log1p, expm1cbrt, hypotacosh,asinh,atanhTR1(如果这些是TR1库,它们会在文档中标记)
从C++ 11反向移植的功能:
可由C++ 17语言特性替换:
<cmath>(特殊数学IS),请参阅下面的列表
标准团队仍在努力:
MPL的很大一部分可以使用可变参数模板进行修剪或删除.Lexical强制转换的一些常见用例可以用std :: to_string和std :: sto X替换.
一些Boost库与C++ 11相关,但也有一些扩展,例如Boost.Functional/Hash包含hash_combine和C++ 11中没有的相关函数,Boost.Chrono有I/O和舍入以及许多其他时钟,所以你可能仍然想在真正解雇它们之前先看看提升的那些.
seh*_*ehe 55
实际上,我认为升级库不会成为遗产.
是的,你应该能够使用std::type_traits,regex,shared_ptr,unique_ptr,tuple<>,std::tie,std::begin而不是加速Typetraits /公用事业,助推智能指针,升压元组,升压范围库,但应该在实践中并不真的需要"开关",除非你正将越来越多的你的代码到c ++ 11.
另外,根据我的经验,std大多数这些版本的功能都不那么特别.例如AFAICT标准并不能有
bool boost::basic_regex<>::empty())和其他接口差异
懒惰的,基于表达模板的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);
Run Code Online (Sandbox Code Playgroud)
最明确的是,这仍然比C++ 11 lambdas具有一些吸引力(具有尾随返回类型,显式捕获和声明的参数).
此外,Boost还有一个很大的作用,正是在促进从C++ 03到C++ 11的路径迁移以及集成C++ 11和C++ 03代码库的过程中.我特别想到
boost::result_of<>及相关)只需我0.02美元