Boost C++ 库

……世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

版本 1.69.0

版本 1.69.0

2018 年 12 月 12 日 02:58 格林尼治标准时间

文档

下载
平台文件SHA256 哈希值
unixboost_1_69_0.tar.bz28f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406
boost_1_69_0.tar.gz9a2c2819310839ea373f42d69e733c339b4e9a19deab6bfec448281554aa4dbb
windowsboost_1_69_0.7zaf05616f71006f97833e130aad886c96136457511ace4b5496d6566e69cbe0ca
boost_1_69_0.zipd074bcbcc0501c4917b965fc890e303ee70d8b01ff5712bae4a6c54f2b6b4e52
* 下载链接由 C++ 联盟 的资助支持。

非 Windows 用户须知

Boost 构建系统现在支持可见性。如果您正在构建共享库,它们默认将使用隐藏可见性。因此,Boost 共享库变得更小,加载速度更快,并且减少了符号冲突的可能性。

查看 Boost.Build 可见性和局部可见性 获取更多信息。

要禁用此功能,您可以使用命令行 ./b2 visibility=global 进行构建。

新增库

  • 安全数值: Robert Ramey 提供的 C++14 及更高版本的库,用于保证整数运算的正确性。

更新的库

  • Any:
    • 修复了可见性问题。现在,在一个使用隐藏可见性的共享库中构造的 boost::any 变量可以在另一个使用隐藏可见性的共享库中使用和销毁。
    • 维护:删除了一些对其他 Boost 库的依赖,修复了文档中的错误。
  • Asio:
    • 修复了使用 libstdc++ 检测 std::future 可用性时出现的问题。
    • 修复了 read_until 的正则表达式重载中的编译错误。
    • 修复了移动已取消的定时器时可能发生的定时器堆损坏问题。
    • 使用较新的 clang/libc++ 修复了 std::experimental::string_viewstd::string_view 的检测。
    • 修复了 MSVC 版本检测中 std::invoke_result 可用性的问题。
    • 如果 decltype 可用,则修复缓冲区序列特性以测试新要求。
    • 修复了在禁用异常的情况下进行构建时的 MSVC 问题。
    • 为 TLS v1.3 添加了 SSL 上下文选项。
    • 添加了 TLS v1 支持的编译时测试。
    • 修复了用于测试 TLS v1.2 支持的宏。
    • 防止在 Windows 上每个线程创建一次全局对象。
    • 修复了在默认构造的解析器结果上使用 size()max_size()empty() 时发生的崩溃。
    • 更改为在 basic_resolver_results::begin() 中移动返回值,以避免复制。
    • 为 Intel 编译器启用了移动支持。
    • 使用 clang-cl 时修复了 std::string_view 检测问题。
    • 修复了 io_context::executor_type::dispatch 的处理程序跟踪操作名称。
    • 修复了解析具有 64 位范围 ID 的地址字符串时可能发生的缓冲区溢出。
    • 添加了显示如何编写组合操作的示例。
    • 添加了超时、定时器、SOCKS4 和 SSL 示例的 C++11 版本。
    • 修复了文档和示例中的小问题。
  • Assign:
    • 添加右值引用、完美转发和可变参数模板支持 (PR#6) (#10477)
    • 避免转换为容器的分配器 (PR#29) (#5419) (#7364)
  • Beast:
    • 此版本修复了示例中的一些问题,并提供了一个新的实验性套接字,该套接字支持异步操作上的内置超时。
    • 新的 CppCon 2018 websocket 聊天示例演示视频
    • 有关更改的完整列表,请查看官方 发行说明
  • CircularBuffer:
    • 使用空基优化来存储为空且不是最终的分配器 (Glen Fernandes)。
  • 概念检查:
    • 删除了对 mpl 的依赖。(PR#14)
  • Context:
    • #85:重复的别名应该缺少 GCC 别名
    • #87:clang-win 工具集 (clang-cl.exe) 使用底层 msvc 的 masm
    • #90:删除 Jamfile.v2 中无用的行
    • #91:为 *_elf_gas.S 文件添加 .file 部分
  • Core:
    • 实现了 boost::empty_value,供库作者方便地利用空基优化来存储可能为空类型的对象 (Glen Fernandes)。此功能现在已用于 Boost.Beast、Boost.CircularBuffer、Boost.MultiArray 等。
    • 实现了 boost::quick_exit 以提供 C++11 标准库功能 std::quick_exit 功能 (Peter Dimov)。
    • 减少了轻量级测试中的静态数量,并在未能调用 boost::report_errors 时对 MSVC 编译器采用更轻的终止行为 (Glen Fernandes)。
  • DLL:
    • 解决了与智能库相关的链接问题 #20
    • 维护:修复了文档和测试。
  • 动态位集:
    • 性能改进(在某些情况下超过 2 倍)。(PR#26)
    • 添加了基于范围的设置、重置、反转方法 (PR#27)
  • Fiber:
    • #181:unbuffered_channel push 不返回
    • #182:删除文件开头的 UTF-8 BOM
    • #183:修复 boost-install 使用;应只发出一次
  • Filesystem:
    • 在 Linux 和 Android 上不要使用 readdir_r,因为 readdir 函数已经是线程安全的。(PR#68#72)
    • 修复了由于实现中的未定义行为导致的 boost::filesystem::copy 中的崩溃。(PR#71)
    • 修复了 boost::filesystem::directory_iterator 实现中的未定义行为。(PR#77)
    • 修复了使用 BOOST_FOREACH 与目录迭代器一起使用时的编译错误。
    • 删除了对较旧的 PGI C++ 编译器版本的变通方法,以修复在较新版本上的编译。(PR#49)
    • 修复了 MSVC 关于缩窄转换的警告。(PR#44)
  • Flyweight:
    • 修复了与 GCC 相关的 Boost.MPL 占位符表达式处理问题。
    • 维护修复。
  • Function:
    • 删除了对 mpl、test 的依赖 (PR#20) (PR#22)
  • Geometry:
    • 改进
      • PR#486 用于内部使用的 Karney 直接测地线问题解决方案(感谢 Adeel Ahmad)。
      • PR#490 离散弗雷歇和豪斯多夫距离算法(感谢 Yaghyavardhan Singh Khangarot)。
      • PR#496 新的运行时和升级的编译时 SRS 转换接口(目前由于潜在的接口更改而未记录)。
    • 已解决的问题
      • #520 缺少 dsv() 的文档。
      • #521 distance() 的文档描述错误。
      • #524 修复了“枚举值在 switch 中未处理”警告。
      • #527 VS 2017 (msvc-15) 的变通方法。
    • 错误修复
      • PR#505 修复了叠加算法中的溢出(感谢 Dane Springmeyer)。
      • PR#518 修复了在 append() 中传递临时对象的问题(感谢 xventura81)。
      • PR#522 在构建文档中支持 python3。
  • GIL:
    • 更改
      • 将库包含重构为 #include <boost/gil/...> 结构 (PR#145)。
    • 删除
      • 标头文件 include/boost/gil_all.hpp 已弃用 (PR#145)。
      • 标头文件 include/boost/gil_concepts.hpp 已弃用 (PR#145)。
      • 标头文件 include/boost/gil_config.hpp 已不再需要 (PR#144)。
    • 修复
      • 修复了point<T> 的除法和乘法运算,不再将结果硬编码为point<double> (PR#157).
      • 修复了std::fill_nboost::range::fill_n之间的冲突 (PR#152).
      • 修复了for_each_pixel中函数对象重新赋值的问题 (PR#139).
      • 修复了依赖名称axis_iterator之前缺少模板关键字的问题 (PR#129).
  • 整数:
    • boost/pending/integer_log2.hpp 头文件已弃用,将在未来的版本中移除。请使用boost/integer/integer_log2.hpp代替。
  • Iostreams:
    • 移除对不存在的std::fpos成员函数seekpos()的调用 (PR#58)
  • 迭代器:
    • 修复了对迭代器(其类型涉及boost命名空间中的类型)进行advancedistance调用时出现的歧义未限定调用导致的编译问题。(#43)
  • LexicalCast:
    • 修复了符号转换警告 #8991
    • 维护:删除了一些对其他Boost库的依赖,修复了构建系统警告。
  • 日志:
    • 一般更改
      • 更新了syslog sink后端,避免使用已弃用的Boost.ASIO接口。(#59)
    • 错误修复
      • 修复了在某些情况下可能错误估计文本文件 sink 目标目录中已旋转文件的总大小的问题。
    • 更多详情请参见 变更日志
  • 逻辑:
    • 重大更改:在可用时使用显式运算符 bool (PR#5)
  • 数学:
    • 添加LambertW函数。
    • 更新积分例程以支持复值被积函数和轮廓积分。
    • 添加了重心有理逼近的导数。
    • 进行了一些小的修改,以更好地支持可变精度浮点类型。
    • 移除对已弃用的Boost.Endian的使用,改用Predef。
    • 更新了连分数和级数计算代码以支持复数类型。
    • 防止导致toms748_solve中无限循环的逻辑错误。参见 #138
    • 修复了extreme_value_distribution的均值和标准差。参见 #139
    • 改进了newton_raphson_iterate中使用的启发式算法。参见 #145
    • 修复了erf(NaN)的结果。参见 #141 #141
    • 大力减少GCC警告。参见 #136 #136
    • 重构多项式加法。参见 PR#132
    • 针对vxWorks全局命名空间中存在real函数的修复。参见 PR#131
    • 改进sinc近似值并添加更好的测试。
    • 修复了学生t检验文档中的错别字,参见 #143
  • Mp11:
    • 实现了mp_starts_with功能 (Glen Fernandes)。
  • 多维数组:
    • 改进了C++11分配器模型的支持,包括:支持C++11最小分配器,支持有状态分配器,使用分配器构造和析构值类型,以及使用空基优化来存储空或无状态分配器 (Glen Fernandes)。
  • 多索引容器:
  • 高精度:
    • 进行了重大更新,以更好地支持可变精度类型,以便结果的精度始终是所有参数中最大的。
    • 在__cpp_int中添加对最终分配器的支持 (Glen Fernandes)。
    • 移除对已弃用的Boost.Endian的使用,改用Predef。
    • 添加对std::string_view的支持。
    • 修复了常量初始化中的一个小错误。参见 #67
    • 将非有限值赋值给cpp_int作为运行时错误处理。参见 #58
    • 添加了cpp_bin_float_octcpp_complex_oct的typedef。
  • PolyCollection:
    • 添加了Boost.PolyCollection特定版本的算法std::for_each_nstd::sample
  • :
    • 替换boost::mutex的使用以避免依赖于Boost.Thread (PR#23)
  • 预处理器:
    • 支持VC++ 14.1中的新的符合C++标准的预处理器,目前可以通过在Visual Studio 2017 15.8及更高版本中使用/experimental:preprocessor开关启用。
  • 有理数:
  • Spirit:
    • Spirit.X3
      • 放弃自己的FP例程,转而使用boost::math (#392) (#13531)
      • 异常类型缺少可见性标记 (#409)
      • to_utf8:修复了Windows上的wchar_t处理 (#413) (#395)
    • Spirit V2
      • 放弃自己的FP例程,转而使用boost::math (#392) (#13531)
      • 异常类型缺少可见性标记 (#409)
      • 修复了transform_attribute歧义 (#407) (#396)
      • to_utf8:修复了Windows上的wchar_t处理 (#413) (#395)
    • Spirit.Classic
      • 异常类型缺少可见性标记 (#409)
  • 堆栈跟踪:
    • libbacktrace的使用得到了显著改进。鼓励BOOST_STACKTRACE_USE_BACKTRACEboost_stacktrace_backtrace用户进行更新
      • 内存消耗降低。
      • 堆栈捕获速度提高了一个数量级。
      • 启用syminfo回退,即使没有调试信息也能提供可见符号的信息(感谢github用户driesdeschout!)#60#61
      • 现在可以通过BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE指定backtrace.h头文件的精确位置,以便在其他情况下无法访问该头文件的平台和编译器上使用backtrace.h头文件(例如Ubuntu Xenial + Clang) #59
    • 如果设置了max_depth,则优化堆栈捕获(感谢Jan Eisenhauer提供的PR!) #67
    • 添加了to_string(const stacktrace& )函数,用于将堆栈跟踪快速转换为std::string #57
    • 维护:更新文档 #62,更新测试。
  • 系统:
    • Boost.System现在是仅包含头文件的库。为了兼容性,仍然会构建一个存根库,但是不再需要链接到它。
    • 更多函数已被标记为constexpr
    • error_category的析构函数现在是protected而不是virtual。这是一个潜在的破坏性更改,但其影响预计有限。
    • error_category现在有一个接受64位标识符的构造函数,允许不同的类别对象比较相等。
    • error_category的构造函数现在是protected
    • 添加了message的非分配、非抛出重载。
    • 添加了一个虚函数failed,允许成功不与0同义的类别。
    • 已移除已弃用的boost::system::throws对象。
    • boost::throws()现已弃用,不建议使用。
    • 接受单个error_code参数的system_error构造函数现在是explicit
    • system_error::code()现在按值返回。
  • 测试:
    • Boost.test v3.9,更多详情请参见变更日志
    • 新功能
      • 官方支持Boost.Test的仅包含头文件的变体,支持多个翻译单元。
      • 现在可以通过使用BOOST_TEST_CASE_NAME指定测试用例的名称来手动添加测试用例。
      • 更好地支持日志中的boost::exception
    • 错误修复和拉取请求
  • TypeIndex:
    • 修复了回归问题,并将boost/type_traits.hpp头文件的解析速度提高了30%(感谢Nikita Kniazev提供的PR!) #21
  • 实用程序:
    • 通过避免对声明为final的类型的空基优化,为boost::compressed_pair添加了对不可继承的空类型的支持 (Glen Fernandes)。
  • 变体:
    • 修复了可见性问题。现在boost::bad_visit异常可以跨越具有隐藏可见性的共享库的边界,并可以在具有隐藏可见性的其他共享库中捕获。
  • YAP:
    • 进行了一些小的更改以支持MSVC++ 14.15版(Visual Studio 2017 15.8版)。
    • 文档修复。

已停止维护的库

  • Signals (v1) 已移除。其移除已在1.68版本中宣布,其弃用已在1.54版本中宣布。Boost 1.68是提供此库的最后一个版本。鼓励用户改用Signals2。Boost社区感谢Douglas Gregor为Signals所做的工作,它很好地为用户服务,也启发了Signals2。

测试过的编译器

Boost的主要测试编译器是

  • Linux
    • Clang:3.0、4.0.1、6.0.1
    • Clang,C++0x:3.0
    • Clang,C++11:3.0、3.1、3.2、3.3、3.4、4.0.1、6.0.1
    • Clang,C++14:3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.2、6.0.1
    • Clang,C++17:5.0.2、6.0.1
    • GCC:4.4.7、4.5.3、4.6.3、5.4.0、8.0.1
    • GCC,C++0x:4.4.7
    • GCC,C++11:4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、8.0.1
    • GCC,C++14:5.4.0、5.5.0、6.4.0、7.1.0、7.3.0、8.0.1
    • GCC,C++17:7.3.0、8.0.1
    • Intel,C++14:18.0
  • OS X
    • Apple Clang:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++11:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++14:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++17:9.1.0、10.0.0
    • Apple Clang,C++1z:9.0.0
    • Apple Clang,C++2a:10.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC,C++0x:4.6.4
    • GCC,C++11:4.7.3、4.8.1、4.9.3
    • GCC,C++14:5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0
    • GCC,C++17:7.1.0、7.2.0、7.3.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • FreeBSD
    • Clang:4.0.0
    • Clang,C++11:4.0.0
    • Clang,C++14:4.0.0
    • Clang,C++1z:4.0.0

Boost的额外测试编译器包括:

  • Linux
    • Clang:3.0、3.8.1、3.9.1、4.0.1、5.0.2、6.0.1
    • Clang,C++0x:3.0
    • Clang,C++11:3.0、3.1、3.2、3.3、3.4、4.0.1、6.0.1
    • Clang,C++14:3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.2、6.0.1、7.0.0
    • Clang,C++17:5.0.2、6.0.1
    • GCC:4.4.7、4.5.3、4.6.3、4.9.4、5.4.0、5.5.0、8.0.1
    • GCC,C++0x:4.4.7
    • GCC,C++11:4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、8.0.1
    • GCC,C++14:5.4.0、5.5.0、6.3.0、6.4.0、7.1.0、7.3.0、8.0.1、8.1.0
    • GCC,C++17:7.3.0、8.0.1
    • Intel,C++14:18.0
  • OS X
    • Apple Clang:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++11:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++14:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++17:9.1.0、10.0.0
    • Apple Clang,C++1z:9.0.0
    • Apple Clang,C++2a:10.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC,C++0x:4.6.4
    • GCC,C++11:4.7.3、4.8.1、4.9.3
    • GCC,C++14:5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0
    • GCC,C++17:7.1.0、7.2.0、7.3.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • FreeBSD
    • Clang:4.0.0
    • Clang,C++11:4.0.0
    • Clang,C++14:4.0.0
    • Clang,C++1z:4.0.0

鸣谢

Daniel James、Vladimir Prus、Marshall Clow和Michael Caisse负责本次发行。