Boost C++ 库

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

版本 1.81.0

版本 1.81.0

2022 年 12 月 14 日 17:44 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_81_0.tar.bz271feeed900fbccca04a3b4f2f84a7c217186f28a940ed8b7ed4725986baf99fa
boost_1_81_0.tar.gz205666dea9f6a7cfed87c7a6dfbeb52a2c1b9de55712c9c1a87735d7181452b6
windowsboost_1_81_0.7zd7bc4e2a2aee374a8c24832cacfed1265680c1e824d09fab3e00f87508155353
boost_1_81_0.zip6e689b266b27d4db57f648b1e5c905c8acd6716b46716a12f6fc73fc80af842e
* 下载链接由 C++ 联盟的资助支持。

新库

  • URL: 由 Vinnie Falco 和 Alan de Freitas 开发的仅使用 C++11 的 URL 解析、修改和打印库。功能包括快速编译、强大的不变性和严格的内存友好型合规性。

更新的库

  • Asio:
    • 添加了 consign 完成令牌适配器,可用于将附加值附加到完成处理程序。
    • 添加了 any_completion_handler<>,可用于类型擦除完成处理程序。
    • 添加了 experimental::co_composed,以使用 C++20 协程实现轻量级的用户定义异步操作。
    • 添加了基于范围的 experimental::make_parallel_group() 重载。
    • 添加了 any_completion_executor,一种与完成处理程序关联的执行器的类型擦除包装器。
    • 为 use_future 的执行器添加了缺失的 context 查询。
    • execution::any_executor<>any_io_executor 添加了 noexcept 构造函数重载。
    • 优化了空 execution::any_executor 对象的表示形式,以提高复制和移动操作的性能。
    • std::reference_wrapper 添加了 associated_cancellation_slot 特化。
    • 更改了 I/O 对象以通过常量引用返回其执行器。
    • 更改了关联以对所有双参数 get 函数使用推导的返回类型。
    • 修复了 spawn 实现,以捕获未处理的异常并在派生的“线程”外部重新抛出它们。
    • 修复了 spawn,以确保完成处理程序通过正确的执行器分派。
    • 修复了终端状态 spawn “线程”对象的清理。
    • 修复了 spawnco_spawn 实现,以在正确的执行器上分派取消处理程序。
    • 更改了“dispatch”的语义,表示执行器按原样使用。
    • 弃用了 execution::execute 自定义点和发送者/接收者工具。
    • 添加了 C++11 parallel_group 示例。
    • 修复了示例代码,使其不使用已弃用的 resolve 转换。
    • 修复了 experimental::channel_traits 特化中的歧义。
    • R(error_code) 签名添加了专门的通道实现。
    • 使 cancelled()async_compose “self”对象上公开。
    • async_compose “self”对象添加了 io_executor_type 和 get_io_executor。
    • 修复了 Windows 重叠句柄的 release() 实现。
    • experimental::coro 启用了延迟等待,规范化了 experimental::use_coro,并修复了分配器处理。
    • 清理了 experimental::promise 并使其成为异步操作对象。
    • 约束了在需要 blocking.never 能力上的 post/defer 重载。
    • 更改了描述符实现,以便在设置非阻塞模式时,如果 ioctl 调用失败并返回 ENOTTY,则回退到 fcntl
    • 修复了与使用 sprintf 相关的 Xcode 弃用警告。
    • 修复了在内部线程上运行 select_reactor::run 时传递的参数。
    • 修复了定义 BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING 时的编译错误。
    • 更新了 Clang 14 及更高版本上 C++20 协程支持的检测。
    • 更改了标准库功能检测,以便在以 C++17 或更高版本为目标时始终启用 std::invoke_result
    • 修复了 MSVC 中返回类型推导的检测。
    • 更新了异步操作要求,以放宽对关联执行器的要求。
    • 添加了io_uring到实现说明中。
    • 请参阅修订历史以获取更多详细信息。
  • Beast:
    • 添加 buffers_generator
    • 添加 beast::http::message_generator
    • 添加了 buffer_ref,以便 beast 缓冲区可以与 asio 一起使用。
    • 支持每个操作的取消
    • C++20 可等待示例。
    • websocket 每消息压缩选项
    • websocket 超时选项 API
    • 多个内容长度错误
    • 支持默认完成和重新绑定
  • Container Hash:
    • 重大更新。
    • 已删除 boost::hash 的特化;现在始终调用 hash_value
    • 已删除对 BOOST_HASH_NO_EXTENSIONS 的支持。扩展始终启用。
    • 现在支持所有标准容器。这包括 std::forward_list 和无序关联容器。
    • 现在开箱即用地支持用户定义的容器(具有返回迭代器的 begin()end() 成员函数的类型)。
    • 现在开箱即用地支持描述的结构和类(使用 BOOST_DESCRIBE_STRUCTBOOST_DESCRIBE_CLASS 注释的结构和类)。
    • hash_combine 已得到改进。
    • 字符串哈希的性能(以及质量,由于上述更改)已得到提高。字符串的 boost::hash 现在在 64 位模式下通过 SMHasher。
    • 文档已进行大幅修订,以反映这些更改。
  • Core:
    • empty_value 成员现在标记为 constexpr
    • 添加了 fclose_deleter,一个在指向 std::FILE 的指针上调用 std::fclose 的删除器。
    • boost/core/bit.hpp 中的位操作实用程序现在显式要求输入为无符号整数。 (#129)
    • bit_width 现在返回 int 而不是输入参数类型的值。这遵循了 LWG3656 的决议。
  • Describe:
    • 为了允许在使用 -pedantic 选项时包含 enumerators.hppbases.hppmembers.hppBOOST_DESCRIBE_ENUM 的调用已从 modifiers.hpp 移至单独的标头 modifier_description.hpp。 因此,modifiers.hpp 不再包含 enum.hpp。 依赖于此隐式包含的代码可能会失败,并且需要修复以包含 enum.hpp
  • DLL:
    • 修复了 Windows 平台的 path_from_handle 实现,感谢 @SaltfishAmi 提交的错误报告 57
  • Filesystem:
    • 已弃用:v3 中已弃用,在 v4 中已删除从字符容器(例如 std::vector<char>std::list<wchar_t>)构造、赋值和附加 path。 请改用字符串类型或迭代器。
    • 已弃用: boost/filesystem/path_traits.hpp 标头已弃用,将在未来的版本中删除。 该标头包含 path 的实现细节,不应在用户代码中使用。
    • 以前弃用的 API 现在将在使用时生成编译警告。 要禁止这些警告,可以在编译用户代码时定义宏 BOOST_FILESYSTEM_ALLOW_DEPRECATED
    • 修复了由于不支持 *at API 的 POSIX 系统上缺少包含文件而导致的编译错误。 (#250)
    • 在 Windows 10 之前的版本中,针对网络共享文件系统添加了一个解决方法,该文件系统在构造目录迭代器时产生 ERROR_INVALID_PARAMETER。 (PR#246, #245)
    • 在 Windows 上,如果路径以 "\\?\" 前缀开头,则修复了 weakly_canonical 失败并出现 ERROR_INVALID_FUNCTION 错误代码的问题。 (#247)
    • path 构造函数、赋值和附加操作中添加了对 std::string_viewboost::string_viewboost::container::string(以及各自的 wchar_t 对等项)的支持。 (#208)
    • 采用迭代器对的 path 构造函数、赋值和附加操作将不再接受值类型不是受支持的路径字符类型之一的迭代器。
    • 在 Windows 上,提高了 directory_iterator 与各种已挂载文件系统和 7.21 之前的 Wine 版本的兼容性。 (#255, #266)
    • 在 Windows 上,重复数据删除的文件现在报告为常规文件,而不是重新分析文件。 (#262)
  • Fusion:
    • 添加了 fusion::identity_view (PR#240)
    • fusion::transform_view 上添加了对关联序列的支持 (PR#239)
    • 修复了与关联序列一起使用 fusion::reverse_view 时的编译问题 (PR#237)
    • 修复了 Clang 13 -Wdeprecated-copy 警告 (PR#261)
    • 一个小的依赖关系重组。 现在 Boost.Core 中使用了 boost::refboost::noncopyable (PR#249)
    • 在 Linux 和 MacOS 上为 clang 和 gcc 添加了 CI 测试,修复了 Windows 上的 CI 测试 (PR#245, PR#236)
    • 改进了文档并修复了拼写错误 (#234, PR#235, PR#238)
  • Geometry:
    • 已解决的问题
      • #1048 Index: 修复了 IndexableGetter 按值返回 Indexable 时的悬空引用
      • #1076 Union: 在极少数情况下,可能会遗漏一个多边形
      • #1081 Union: 由于精度问题,可能会遗漏内部环
    • Bugfixes
      • #1063 Intersection: 修复了简单球面多边形交集的错误
      • #1064 Formulas: 修复了大地测量直接公式中的一致性问题
      • #1088 Point: 修复了自定义点类型的回归
      • 各种针对缺少包含文件、警告、C++20 编译错误和文档的修复
  • Histogram:
    • 重大更新。
    • 添加了新的 accumulators::fraction 以计算分数、它们的方差和置信区间
    • 为分数添加了区间计算器:utility::clopper_pearsonutility::wilson_intervalutility::jeffreys_intervalutility::wald_interval,它们可以计算具有任意置信水平的区间
    • 添加了 utility::confidence_levelutility::deviation 类型,分别以概率或标准偏差的倍数传递所有区间计算器的置信水平
    • 修复了 C++20 中的内部 sub_arrayspan
  • Iterator:
    • function_output_iterator 现在支持将分配的值完美转发到包装的函数对象。 (PR#73)
    • 修复了从后递增另一个 function_input_iterator 的结果构造 function_input_iterator 的编译错误。 (#75)
    • 基于 iterator_facade 的迭代器的后递增结果现在支持 operator->(it++)->foo 等效于之前支持的 (*it++).foo
  • JSON:
    • 添加了 object::stable_erase
    • std::istreamvalueoperator>> 添加了 parse 重载。
    • value 添加了右值引用限定的访问器。
    • 重新设计了转换特性。
    • 添加了对描述的类和枚举、std::optionalstd::variant 和类似 null 的类型(包括 std::nullptr_tstd::nullopt_tstd::monotype)的转换支持。
    • 添加了从 value 到用户类型的非抛出转换。
  • LexicalCast:
    • 修复了在转换 volatile 算术类型时的编译问题。 感谢 Giovanni Cerretani 提交的错误报告 #50
    • 删除了已弃用标头的使用。 感谢 Michael Ford 提交的 PR PR#53
  • Locale:
    • 重大更新,包含一些重大更改。
    • 现在需要 C++11 支持,已删除对 C++03 及更早版本的支持
    • 一些枚举已转换为枚举类 - 避免名称冲突
    • 通过 Boost.RegEx 中完成的细粒度配置选项替换 -sICU_LINK_LOCALE & -sICU_LINK
    • 修复了 libiconv 的检测,允许 Boost.Locale 在某些平台上(再次)构建
    • 删除对 std::auto_ptr 的使用和支持
    • 使在 Windows 上使用 wchar_tcodecvt 假定/使用 UTF-16 编码
    • 性能改进:使 basic_formatdate_time & hold_ptr 可移动,修复了格式缓存的使用
    • 使 Boost.Locale 与更多 ICU 版本兼容(尤其是测试)
    • 修复了一些类的 RTTI 定义(可见性问题)
    • 修复了 ICU 后端与某些 libc++ 版本的兼容性
    • 修复了一些运算符的返回值,以正确返回非 const *this
    • 修复了 date_time 中年份负滚动的整数溢出
    • 处理或抑制许多警告,使构建日志更简洁
    • 添加了对更多 Windows 代码页的支持
    • 修复了对 ISO-2022-JP 等 Windows 代码页的支持
  • Nowide:
    • 修复了 MSVC 上测试的构建失败
  • Stacktrace:
    • 该库不再使用 COM 初始化。 感谢 Alex Guteniev 提交的错误报告、说明和 PR PR#123
    • 该库现在可以在 b2 中检测 libbacktrace 可用性时使用 BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE 宏值,感谢 Ben Gemmill 提交的错误报告 #115
    • 添加了 BOOST_STACKTRACE_BACKTRACE_FORCE_STATIC 宏,以在使用 libbacktrace 时强制使用单个 backtrace_state 静态实例。 感谢 Rasmus Thomsen 提交的错误报告 #118
    • 避免在仅包含 boost/stacktrace/stacktrace.hpp 标头时出现未解析的引用。 感谢 Long Deng 提交的错误报告 #116
    • 通过不在 Windows 平台上调用 strlen 来优化堆栈跟踪打印。 感谢 Alex Guteniev 提交的错误报告 #122
  • PFR:
    • 改进了 C++14 模式下聚合初始值设定项的检测,感谢 Denis Mikhailov 提交的 PR PR#97
    • 抑制了 clang-tidy 警告,感谢 Alexander Malkov 提交的 PR PR#109, PR#104
    • 如果编译器支持折叠表达式,则使用折叠表达式。 感谢 Jean-Michaël Celerier 提交的 PR PR#96
  • STLInterfaces:
    • 修复了 C++20 之前的迭代器中带有 const value_type 的两个格式错误的 iterator_interface 运算符。
  • System:
    • 现在可以定义宏 BOOST_SYSTEM_DISABLE_THREADS 以禁用 <mutex> 的使用(例如,在单线程 libstdc++ 上)。
    • result<> 添加了 value_typeerror_typein_place_valuein_place_error
    • result<> 添加了 emplace
  • Unordered:
    • 重大更新。
    • 添加了基于开放寻址的快速容器 boost::unordered_flat_mapboost::unordered_flat_set
    • 为所有容器添加了 CTAD 推导指南。
    • 添加了 LWG issue 2713 中指定的缺失构造函数。
  • Variant:
    • 避免了标头的递归包含,感谢 Nathan Sidwell 提交的错误报告 #101
    • 删除了已弃用标头的使用,感谢 Michael Ford 提交的 PR PR#96
    • 修复了 C++23 模式下 clang 上的编译问题,感谢 Ed Catmur 提交的 PR PR#98
  • Variant2:
    • 添加了对 boost::json::value_fromboost::json::value_to 的支持。

已测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC: 4.6.3, 11, 12
    • GCC, C++11: 4.7.3, 4.8.5, 11, 12
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
  • OS X
    • Apple Clang: 11.0.3
    • Apple Clang, C++11: 11.0.3
    • Apple Clang, C++14: 11.0.3
    • Apple Clang, C++17: 11.0.3
    • Apple Clang, C++20: 11.0.3
  • Windows
    • Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3

致谢

Marshall Clow 和 Glen Fernandes 管理了此版本。