Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

版本 1.66.0

版本 1.66.0

2017年12月18日 13:58 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_66_0.tar.bz25721818253e6a0989583192f96782c4a98eb6204965316df9f5ad75819225ca9
boost_1_66_0.tar.gzbd0df411efd9a585e5a2212275f8762079fed8842264954675a4fddc46cfcf60
windowsboost_1_66_0.7z596389389c005814ecb2a6b64c31dccd2c3e6fbc5a802b4dfada999ae5844628
boost_1_66_0.zipe1c55ebb00886c1a96528e4024be98a38b815115f62ecfe878fcf587ba715aad
* 下载链接由以下机构的资助支持:C++ 联盟

第三方下载

关于新 Visual Studio 版本的说明

Visual Studio 15.5 发布得太晚,我们无法用它来测试此版本。

新库

  • Beast: 可移植的 HTTP、WebSocket 和网络操作,仅使用 C++11 和 Boost.Asio,来自 Vinnie Falco。
  • CallableTraits: Boost.FunctionTypes 的精神继承者,Boost.CallableTraits 是一个仅头文件的 C++11 库,用于在编译时检查和操作所有“可调用”类型。 额外支持 C++17 功能,来自 Barrett Adair。
  • Mp11: 一个 C++11 元编程库,来自 Peter Dimov。

更新的库

  • Asio:
    • 实现了接口更改以反映 Networking TS (N4656)。
      • 请参阅新接口的列表,以及在适用的情况下,已被取代的相应旧接口。
      • 服务模板参数和相应的类默认情况下被禁用。 例如,不再是 basic_socket<Protocol, SocketService> 我们现在只有 basic_socket<Protocol>。 旧接口可以通过定义 BOOST_ASIO_ENABLE_OLD_SERVICES 宏来启用。
    • 移除了先前已弃用的函数。
    • 添加了对自定义处理程序跟踪的支持。
    • 向处理程序跟踪添加了与 reactor 相关的(即描述符就绪)事件。
    • 添加了特殊的“并发提示”值,可用于在每个 io_context 基础上禁用锁定。
    • 为第一个 ssl::stream<> 构造函数参数启用了完美转发。
    • 添加了释放底层原生套接字所有权的能力。(当使用 I/O 完成端口后端时,需要 Windows 8.1 或更高版本。)
  • Atomic:
    • 为整数类型实现了一组实验性的扩展原子操作
      • fetch_negate, fetch_complement - 原子地将值替换为取反或二进制补码值,并返回原始值
      • opaque_<op> - 等同于 fetch_<op>,除了它不返回原始值
      • <op>_and_test - 原子地应用 <op>,如果结果为零,则返回 true注意: 这些操作的结果将在 Boost 1.67 中变为相反。 使用这些函数的代码将需要更新。
      • bit_test_and_set, bit_test_and_reset, bit_test_and_complement - 原子地设置、重置或补充指定的位,并返回该位的原始值
    • 根据 C++17 (P0558R1),不再提供指向非对象类型的指针的算术运算。
    • 同样根据 C++17,在适用的情况下,向用户代码公开了 atomic<T>::value_typeatomic<T>::difference_type 成员 typedef。
    • 改进了与 gcc 7 的兼容性。 特别是,在 x86-64 上使用 128 位操作不再需要链接 libatomic(编译器提供的库)。
  • DateTime:
    • 该库已转换为使用 Boost.WinAPI 作为 Windows SDK 的抽象层。
    • 修复了一个整数溢出,该溢出可能在从日期添加或减去多年时导致不正确的结果(参见此处)。
  • Fiber:
    • 与 CUDA 流同步
    • 与 ROCm/HIP 流同步
  • Format:
    • 改进
      • 接受新的转换说明符
        • a: 设置标志 fixed | scientific (即 hexfloat)
        • b: 设置标志 boolalpha
        • A: 与 a 相同,加上标志 uppercase
        • F: 与 f 相同,加上标志 uppercase
      • 42 接受来自 ISO C99 的新参数类型 jz(像所有其他参数一样解析和忽略)。
      • 44 接受来自 Microsoft 的新参数类型 I, I32, I64, 和 w(像所有其他参数一样解析和忽略)。
      • 33 添加了一个名为 format_matrix 的开发工具,该工具尽可能多地练习格式字符串的不同组合并将它们记录到一个文件中
        • 有助于防止 boost 版本之间的回归
        • 允许与 snprintf 进行比较
    • 缺陷修复
      • 36 安全地允许将 volatile 参数与 operator% 一起使用
      • 4636 提供显式钳位以允许 MSVC /RTCc 成功
      • 7477 修复与 MSVC /Za 的兼容性
      • 10324 已解决常量正确的强制转换问题
      • 11632 修复 -fsanitize=undefined 问题 in alt_sstream.hpp
  • Fusion:
    • PR#149 isspace(c) 在 Dinkum clib for VxWorks 中不是宏,感谢 Brian Kuhl(@kuhlenough)。
    • PR#150 移除循环预处理器包含,感谢 Gregor Jasny(@gjasny)。
    • PR#151 更改 fusion::tuple 的基类。
    • PR#153 修复了 std::array 的编译错误。
    • PR#154 修复了 c++03 上的嵌套和复制错误。
  • Geometry:
    • 改进
      • 为地理 PointLike/AnyGeometry 添加距离计算。
    • 缺陷修复
      • 修复了 union/intersection/difference 的结果,这些结果在非常复杂的情况下可能不正确
      • 修复了 union/intersection/difference/buffer 的有效性问题
      • 修复了非笛卡尔坐标系中集合和关系运算的问题。
  • Iterator:
    • next()/prior() 函数现在支持用户迭代器,这些迭代器不指定嵌套类型,例如 iterator_category, difference_type 等,而是专门化 std::iterator_traits 来定义这些类型。 编译器必须支持与 C++17 兼容的 std::iterator_traits 才能使其工作。
  • Log:
    • 缺陷修复
      • 修复了 file_collector::scan_for_files 中的一个错误,该错误可能在用户应用程序重启后导致目标目录中日志文件命名不正确。
    • 有关更多详细信息,请参阅更新日志
  • Math:
    • 新功能
      • 添加 Gauss 和 Gauss-Kronrod 正交例程。
      • 添加双指数(tanh-sinh、exp-sinh 和 sinh-sinh)正交例程。
      • 添加 Chebyshev 多项式求值、根、积分、微分和插值例程。
  • 多索引容器:
    • 使 modifymodify_key 更加健壮,以便在修饰符抛出异常或回滚仿函数未正确恢复元素时,修改后的元素将被擦除(完整讨论请参见 ticket #12542)。 这在技术上是向后不兼容的; 例如,以下代码
      c.modify(c.begin(),[](auto&){throw 0;});
      
      在前版本的 Boost 中保持容器 c 不变,而现在 c.begin() 被擦除。 感谢 Jon Kalb 提出问题。
    • 维护修复。
  • Optional:
    • 在较新的编译器上,对于标量 Ts,optional 现在是可平凡复制的。 这使用不同的存储(仅 T 而不是 aligned_storage)。 我们要求编译器支持默认函数。
    • 更改了 operator== 的实现以消除来自 GCC 的 -Wmaybe-uninitialized 误报警告。
  • PolyCollection:
    • Boost.PolyCollection 已向后移植到 GCC 4.8 到 4.9 和 Clang 3.3 到 3.6。 GCC 4.8 附带的 libstdc++-v3 版本(Clang 也可以使用)存在缺陷,导致在使用 Boost.PolyCollection 时存在以下限制
      • 状态分配器未得到正确支持。
      • 分配器扩展的移动构造衰减为分配器扩展的复制构造。
      • 如果在元素复制期间抛出异常,则复制构造会崩溃。
    • 维护修复。
  • Predef:
    • 改进了 Windows 通用平台检测。(来自 James E. King, III)
    • 添加了对带有 cloudlibc 的 CloudABI 的检测。(来自 James E. King, III)
    • 各种其他缺陷修复。
  • Regex:
    • 缺陷修复
      • 针对去模糊化发现的安全问题进行了许多小修复。
  • Stacktrace:
    • 现在可以在 MinGW-w64 上开箱即用。
    • 如果正确安装了 libbacktrace,现在可以在 MinGW 上工作(不带 -w64)。 有关更多信息,请参阅文档中的“MinGW specific notes”部分。
  • Thread:
    • 缺陷修复
      • #12323 windows - boost/thread/win32/mfc_thread_init.hpp 中 _pRawDllMainOrig 的签名错误
      • #12730 windows - 静态线程库与 MSVC 2017 RC 不兼容
      • #12976 Boost 线程执行器文档错误
      • #12949 在线程上下文中不包含 boost/thread/thread.hpp 的情况下使用 sleep_for 会在定义 BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC 时产生不正确的行为
      • #13019 BOOST_THREAD_PROVIDES_INTERRUPTIONS 的 ABI 兼容性不完整
      • #13069 Boost 单元测试 "sync_pq_multi_thread_p_lib.exe" 在线程库中挂起
      • #13163 boost::detail::heap_new 没有可变参数变体
      • #13226 getpagesize() 自 199506L 以来已弃用
      • #132 VS 2017.4 Preview 在测试 10964 上死锁
      • #133 windows - windows 上出现虚假的计时测试失败
      • #134 VS 2017.4 Preview 在 sync_pq_multi_thread_p_lib.exe 中死锁
      • #135 VS 2017.4 Preview test_scheduled_tp_p.exe 死锁
      • #136 VS 2017.4 Preview test_scheduler_p.exe 死锁
      • #137 VS 2017.4 Preview executor_ex.exe 死锁
      • #143 msvc-12.0 上的失败
      • #145 BOOST_THREAD_ATTRIBUTE_MAY_ALIAS 的 Clang 构建错误
    • 新的实验性功能
      • #116 [提议] 添加用于延迟 set_value/exception 的 API
  • Utility:
    • boost/next_prior.hpp 已移动到 Boost.Iterator。 用户代码无需更改。
  • Uuid:
    • 改进
      • 26 重构了 name_generator 以支持可配置的哈希提供程序概念,并根据 RFC-4122 提供可选的 MD5 哈希实现。 这将使支持任何成为下一个标准哈希算法的东西变得更容易。
      • 34boost::uuids::ns 中添加了 RFC-4122 命名空间。
    • 缺陷修复
      • 8630 11482 12253 解决了 string_generator 中的各种缺陷。
      • 10665 name_generator::operator() 现在是 const,与文档匹配。
      • Detail 标头已移动到 detail 子目录中。 用户代码无需更改,但是如果您使用旧的标头位置,则可能会收到构建警告。
  • Variant:
    • boost::apply_visitor 现在对 visitables #6971 进行完美转发。 非常感谢 Levon Tarakchyan 实现此功能。

已测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.0, 4.0.1, 5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.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.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.4.0, 7.1.0, 7.2.0
    • GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.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
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4
    • GCC, C++14: 6.2
  • FreeBSD
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

Boost 的其他测试编译器包括

  • Linux
    • Clang: 3.0, 3.8.1, 4.0.1, 5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.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.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0
    • GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1, 8.0.0
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.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, 7.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4
    • GCC, C++14: 6.2
  • FreeBSD
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

致谢

Beman Dawes, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。