Boost C++ 库

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

版本 1.88.0

版本 1.88.0

2025 年 4 月 10 日 20:39 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_88_0.tar.bz246d9d2c06637b219270877c9e16155cbd015b6dc84349af064c088e9b5b12f7b
boost_1_88_0.tar.gz3621533e820dcab1e8012afd583c0c73cf0f77694952b81352bf38c1488f9cb4
windowsboost_1_88_0.7ze84a33716a31c1c8cb00783a411630d41c008e9364002dc0fe55aea4f54f4726
boost_1_88_0.zip8ee21476f1aca1978339f0f4a218b9b8a6746eec83070f32630f97b09c7e91b7
* 下载链接由 C++ 联盟 的资助支持。

新库

  • Hash2: 来自 Peter Dimov 和 Christian Mazakas 的可扩展哈希框架。
  • MQTT5: MQTT5 客户端库,基于 Boost.Asio 构建,来自 Ivica Siladić、Bruno Iljazović 和 Korina Šimičević。

更新的库

  • Array:
    • 将文档转换为 AsciiDoc (Christian Mazakas)。
    • 根据需要添加了 noexceptconstexpr
    • 将过时的函数标记为已弃用。
    • 移除了过时的编译器解决方法。
    • 更改了 array<T, 0>::begin(), cbegin(), end(), cend() 以返回 nullptr,从而启用 constexpr。这与 std::array 的行为一致。
    • 移除了本地 hash_value 重载;boost::hash 原生支持类似数组的类型。
    • array<T, 0> 现在可以使用 = {{}} 进行初始化。
    • 添加了 operator<=>
    • 添加了 to_array
  • Asio:
    • 为各种 local::basic_endpoint 成员函数添加了 noexcept 限定符,使其与 ip::basic_endpoint 一致。
    • 修复了 boost::asio::config 类对整数值的处理。
    • 修复了 experimental::ranged_parallel_group 中的移动后使用错误。
    • 修复了 experimental::promise 实现中不正确的默认模板参数。
    • 修复了 io_uring 实现,使其在 fork 后,如果内部描述符之前未注册,则不再尝试向 reactor 重新注册它们。
    • 修复了 thread_pool 默认构造函数中未初始化的成员。
    • 修复了将 std::span 传递给 boost::asio::buffer 函数时出现的歧义重载问题。
    • 移除了一些在移除已弃用的缓冲区功能后遗留的虚假宏定义。
    • 添加了文档以阐明打开文件时 file_base::flags 的用法。
    • 添加了关于可用运行时配置选项的概述文档。
    • 更新了概述文档,以反映使用 deferred 作为默认完成令牌。
    • 更新了 async_result 文档,以反映对 trait 特化的当前类型要求。
  • Assert:
    • 当定义了 BOOST_ASSERT_HANDLER_IS_NORETURN 时,boost::assertion_failedboost::assertion_failed_msg 被声明为 BOOST_NORETURN
  • Beast:
    • 修复
      • 修复了 iequals 函数中的越界访问。
    • 改进
      • 更新了 SSL 示例以验证对等证书主机名。
      • 重构了 CMakeLists。
      • 从示例中移除了 Boost.Scope 依赖项。
      • WebSocket 中的对等 ping 现在计为活动。
    • 文档
      • 为 Unix 域套接字添加了新示例。
      • 向文档添加了 SSL/TLS 证书部分。
      • 改进了 websocket::stream::async_close 的文档。
    • 致谢
      • Morten M. Neergaard
  • Conversion:
    • 在示例和库代码中使用现代 C++。
  • DLL:
    • boost::dll::shared_library 添加了从 native_handle_t 构造的构造函数。非常感谢 Tiago MatosPR#82
    • 移除了对其他 Boost 库(包括 Spirit、SmartPtr、Move、TypeTraits 和 Function)的多个依赖项。DLL 在编译时变得更加轻量。
    • API 中使用了 std::error_code& 而不是 boost::system::error_code&。这不是一个破坏性更改,因为 boost::system::error_code 可转换为 std::error_code&
    • boost::dll:import_* 函数现在返回 std::shared_ptr 而不是 boost::shared_ptr。定义 BOOST_DLL_USE_BOOST_SHARED_PTR 以恢复旧的行为,但请注意,该宏将在即将到来的 Boost 版本之一中移除。
    • 在示例和库代码中使用现代 C++。
    • boost::dll::library_info 现在在二进制文件损坏的情况下始终抛出异常。更新了文档并添加了一些测试。
    • 在 FAQ 中记录了为什么缺少 RTLD_NODELETE 以及为什么没有 .release() 方法。提供了关于可能的变通方法的建议。
    • 更新了关于构建和使用库的信息。CMake 目标现在在平台需要时与 -ldl 链接。
    • 修复了 Windows 操作系统上长路径的 detail::path_from_handle 实现。
    • 在文档中强调了库的 boost/dll/smart_* 部分是实验性的和不完整的。
    • 修复了库的 boost/dll/smart_* 部分中的多个名称修饰问题。
  • Geometry:
    • 改进
      • PR#1370 放宽了球面归一化中的半周期检查
      • PR#1368 在 rtree 空间谓词中传递 umbrella 策略
      • PR#1367 遍历方面的改进
      • PR#1361 测试在具有整数坐标的随机网格上的集合运算
      • 添加了几个测试用例
      • 在部分代码中使用 using 而不是 typedef
    • 已解决的问题
      • PR#1364 修复了几个策略(添加 getter,修复编译错误和警告)
      • #629 避免坐标转换和未使用参数的警告
      • 各种错误和警告的修复
  • Graph:
    • Bug 修复
      • 替换了 maximum_weighted_matching 的实现,解决了多个问题。
      • 确保在使用前初始化 named_graph
      • 用 Boost.Geometry 替换了 is_straight_line_drawing 中的自定义几何代码,修复了极小角度的不正确结果。
      • 修复了 undirected_dfsfinish_edge 的不正确回调。
    • 性能改进
      • adjacency_list: 从基于 vector 的存储的 add_vertex 中移除不必要的 resize/reserve 调用!快速基准测试表明图构造时间提高了 10%。
      • lengauer_tarjan_dominator_tree: 将 std::deque 替换为 std::vector,对于大型图,性能提高了约 40%。
    • 通用改进
      • 用 C++14 语言特性替换了几个 Boost 实用程序的用法。
      • 使用 C++14 语言特性使示例现代化。
      • 对文档和构建系统进行了各种修复。
      • vertex_by_property 不再需要可变图。
      • 修复了 cycle_canceling 和 Clang 19 的编译问题。
  • Iterator:
    • 放弃了对 C++03 和旧编译器的支持,更新了代码库以使用 C++11 和 MP11,减少了 MPL 的使用。 (PR#82)
    • 添加了 min_category trait,它是 minimum_category 的可变参数等效项,不依赖于 MPL。minimum_category 已弃用,将在未来的版本中移除。
    • enable_if_convertible trait 提取到单独的头文件 enable_if_convertible.hpp 中。该 trait 之前在 iterator_adaptor.hpp 中定义,并且该头文件在包含时仍提供 enable_if_convertible。提供此依赖项是为了向后兼容,并将在未来的版本中移除。建议用户根据需要添加 enable_if_convertible.hpp 的包含。
    • 添加了生成类型的各种迭代器 trait 的 *_t 变体。
    • filter_iteratortransform_iterator 现在使用空基类优化 (EBO) 来减小迭代器的大小,当采用的函数对象是无状态的时。
    • zip_iterator 现在原生支持 boost::tuplestd::tuplestd::pair 用于迭代器元组,并且不需要包含 Fusion 支持头文件。
    • 当包装的函数是指针函数时,function_output_iterator 不再允许默认构造。这种构造以前会创建一个具有未初始化函数指针值的迭代器,并且这样的迭代器将不可用。
    • generator_iterator.hppshared_container_iterator.hpp 头文件已移动到 boost/iterator 目录下。boost 中之前的头文件仍然保留以实现向后兼容,但将在未来的版本中移除。建议用户更新他们的包含。
    • shared_container_iterator 现在使用 std::shared_ptr 在内部引用容器。对 boost::shared_ptr 的支持仍然保留,但它会在迭代器构造时产生性能开销,因为 boost::shared_ptr 现在包装在 std::shared_ptr 中。建议使用 std::shared_ptr 来引用容器。
  • Locale:
    • 将所需的 ICU 版本提高到至少 4.8.1
    • 放弃了对 ICU 50.1 的支持
    • 修复了在浮点格式的输入字符串中解析整数的问题 (PR#241)
    • 支持使用 ICU 后端解析和格式化 uint64_t 值 (PR#246)
    • 在更多平台上支持 char8_t
  • Lockfree:
    • 添加了新的 spsc_value,一个基于三重缓冲区的无锁单生产者单消费者值
  • Log:
    • 在 C++20 及更高版本模式中禁用了 std::codecvt<char16_t>std::codecvt<char32_t> 区域设置 facet 的使用,因为它们在 C++20 中已弃用。这意味着在 C++20 及更高版本中,不再提供与 char16_tchar32_t 之间的字符代码转换。
    • 修复了在使用 CMake 和 MinGW-w64 时的构建问题。 (PR#241)
    • 修复了当后端配置为附加到现有文件,并且活动写入的文件名模式没有计数器占位符,但目标文件名模式有,并且日志文件直接写入目标存储时,text_file_backend 使用的不正确的文件计数器。 (#245)
  • Mp11:
    • 修复了非整数值的 mp_from_sequence(由于偏移量支持在 1.83.0 中意外损坏)
  • MySQL:
    • 即使在存在许多会话建立中的连接的情况下,connection_pool 现在也能正确调整大小。旧算法可能导致池在某些条件下无法按预期调整大小 (#395)。
    • 添加了 any_connection::connection_id。此函数检索连接的 ID,随后可在 KILL SQL 语句中使用以取消查询。此函数等效于官方 C API 中的 mysql_thread_id (#408)
    • connectionany_connection 上正在进行另一个操作时,尝试启动异步操作不再触发未定义的行为。现在它会失败,并显示 client_errc::operation_in_progress 错误 (#405)。
    • connectionany_connection 正在进行多函数操作时,尝试启动操作不再产生潜在危险的数据包不匹配。相反,它会失败,并显示 client_errc::engaged_in_multi_function 错误 (#448)。
    • 改进了在尝试使用没有已建立会话的连接时的诊断。操作现在会失败,并显示 client_errc::not_connected 错误 (#450)。
    • 修复了 connectionany_connection 中关于每个操作取消的竞争条件。在以前的版本中,如果在中间异步操作完成后,但在其处理程序被调用之前发出取消信号,则该信号将被忽略。现在情况不再如此 (#199)。
    • field 的构造函数和从 std::string_view 的赋值现在在 C++17 中可用,而不是 C++20。这些函数由标准特性测试宏保护,仅在 C++20 中可用。这些宏已被替换为它们的 Boost.Config 等效项。
    • 添加了一个使用 C++20 协程的 HTTP 服务器示例。
    • 添加了一个关于同步和异步代码接口的文档页面。这取代了同步连接池代码片段,该代码片段包含竞争条件。
    • 改进了一些其他示例和文档页面。
  • Nowide:
    • 使 getenv 线程安全 (PR#191)
  • PolyCollection:
    • 添加了 boost::variant_collection,一个封闭的多态集合,行为类似于 std::vector<std::variant<...>>
  • SmartPtr:
    • 修复了宽流的 operator<<(在 1.87.0 中意外损坏)
  • Stacktrace:
    • 使用 GetModuleNames 来确定 MSVC 实现的完整模块路径。非常感谢 Daniel KrüglerPR#198
    • 打印相对地址,以便稍后在不知道基地址的情况下对其进行解码。可以通过定义 BOOST_STACKTRACE_DISABLE_OFFSET_ADDR_BASE 来禁用此逻辑。非常感谢 Maciej CzarneckiPR#200
    • 将所有 stacktrace 库作为 b2 功能公开,以便更好地控制构建并显式了解构建了哪些库。有关更多信息,请参阅“配置和构建”部分。非常感谢 Uilian RiesPR#202 中对该功能的初始实现。
    • 修复了使用 MinGW 的 stacktrace_from_exception 构建。感谢 crhilton 的修复。
  • TypeIndex:
    • 修复了在 Boost.TypeIndex 1.84 中引入的 UB,并阻止了库在 clang-20 上构建。
  • Unordered:
    • 使用 Antora 将文档迁移到多页格式。
  • Variant2:
    • 为索引使用最小的适当无符号类型。

测试编译器

Boost 的主要测试编译器是

  • Linux
    • Clang, C++03: 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, C++03: 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, C++03: 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 和 Ion Gaztañaga 管理了此版本。