Boost C++ 库

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

版本 1.83.0

版本 1.83.0

2023 年 8 月 11 日 16:23 GMT

文档

下载
平台文件SHA256 哈希
unixboost_1_83_0.tar.bz26478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e
boost_1_83_0.tar.gzc0685b68dd44cc46574cce86c4e17c0f611b15e195be9848dfd0769a0a207628
windowsboost_1_83_0.7z22ee9dcf3f1fb58f585772f70c69113a4077b92adeac58b643b3543b78633a16
boost_1_83_0.zipc86bd9d9eef795b4b0d3802279419fde5221922805b073b9bd822edecb1ca28e
* 下载链接由 C++ 联盟的拨款支持。

已知问题

这些是库作者提供的补丁,发现得太晚而无法在此版本中修复。

  • JSON
    • Windows ARM 平台上的编译可能会因缺少内部函数而失败,请参阅 #926#927补丁
  • Unordered
    • 修复了错误的复制赋值运算符,该运算符会销毁不存在的元素,请参阅 #205补丁

新库

  • Compat: C++11 标准组件的实现仓库,这些组件是在以后的 C++ 标准中添加的,来自 Peter Dimov 和贡献者。

更新的库

  • Any:
    • 新的 boost::anys::unique_any C++11 类 - boost::any (或 std::any) 的替代方案,它不需要从所持有的类型进行复制或移动构造。
    • 将文档移植到 Quickbook,Doxygen 注释现在在代码中使用。
  • Atomic:
    • 修复了 atomic_ref 对于 const 限定类型的编译问题。请注意,即使是 const 限定的原子对象仍然必须驻留在读写内存中。 (#62)
  • Chrono:
    • 移除对已弃用的 Boost.Ratio 功能的使用。
  • Compat:
    • 添加了 latch.hppstd::latch 的实现 (由 Christian Mazakas 贡献)。
    • 添加了 shared_lock.hppstd::shared_lock 的(部分)实现 (由 Christian Mazakas 贡献)。
  • Core:
    • boost::core::type_name 添加了对不完整类型的支持。
    • boost/core/bit.hpp 中的位操作函数现在在最新的 MSVC 版本 (VS2019 update 5 及更高版本) 上是 constexpr
    • boost::core::byteswap (C++23 中 std::byteswap 的实现) 添加到 boost/core/bit.hpp
    • 将 yield 原语 sp_thread_pausesp_thread_yieldsp_thread_sleep 从 SmartPtr 实现细节移动到 boost/core/yield_primitives.hpp
  • DLL:
  • Filesystem:
    • 添加了 directory_entry::refresh 方法,该方法更新由路径标识的目录条目的内部缓存文件状态。
    • v4: 初始化或修改路径的 directory_entry 构造函数和修饰符现在会自动调用 refresh。如果查询文件状态失败 (例如,如果文件不存在),这可能会导致以前和 v3 中未指示的错误。这种新行为类似于 std::filesystem。
    • v4: 删除了采用 file_status 参数的 directory_entry 构造函数和方法。建议用户删除这些参数,并依赖 directory_entry 在内部调用 refresh
    • 添加了 directory_entry 成员方法,用于检查文件的文件类型,类似于 std::filesystem。
    • 添加了更多用于测试文件状态的方法: is_block_fileis_character_fileis_fifois_socketis_reparse_file
    • recursive_directory_iterator 现在更有可能重用在文件系统迭代期间获得的文件类型信息。这可能会提高性能。 (#288)
    • boost/filesystem/fstream.hpp 中定义的文件流现在是可移动的,如果标准库文件流是可移动的。 (#280)
    • 添加了一个新的头文件 boost/filesystem/cstdio.hpp,其中包含一个可移植的 fopen 重载,它将 path 作为第一个参数。此函数等效于 std::fopen,不同之处在于在 Windows 上,它对路径使用本机宽字符编码。
    • 通用 path 比较运算符现在受到更多限制,以避免当用户代码包含 using namespace boost::filesystem; 指令时可能出现的歧义。 (#285)
    • 修复了用户代码中潜在的重载解析歧义,其中来自迭代器的 path 构造函数可能会干扰采用 std::initializer_list 参数的函数重载。 (#287)
    • 在 Windows 上,为创建目录迭代器时各种文件系统返回的错误添加了更多解决方法。 (#284, #286)
    • 在 Windows 上,放宽了查询文件时间所需的访问权限。 (#290)
  • Flyweight:
    • boost::flyweight 添加了智能指针语法 (operator*operator-> 解引用到基础值)。
    • 修复了 simple_locking 使用的互斥锁不是递归的情况 (问题 #12)。
  • Geometry:
    • 改进
      • PR#1140 删除依赖项并在多个位置将 boost 替换为 std
      • PR#1154 添加缺少的头文件,以便所有头文件都独立编译,符合 Boost 策略
      • PR#1157 在 calculate_point_order 中检查 const Ring 概念
    • 已解决的问题
      • #1100 修复 union
      • #1139 修复不同的几何类型
      • #1158 修复凸包
      • #1161 修复几何体具有极点作为顶点的 within 算法
      • 各种错误和警告的修复
  • Iterator:
    • 添加了 is_iterator 类型特征,允许测试类型是否符合迭代器类型。
    • filter_iterator 现在支持采用的迭代器和函数对象的移动构造。 (PR#79)
  • JSON:
    • 该库现在仅抛出 system_error,除非分配失败,在这种情况下会抛出 std::bad_alloc
    • 序列化行为现在可以通过 serialize_options 更改。
    • 上下文转换。
    • 用于更精确数字解析的解析器选项。
    • 在流 operator<< 中支持 parse_options
    • 允许 InfinityNaN JSON 字面量的解析器选项。
    • 仅验证数字而不是解析数字的解析器模式。
    • 指数大于 INT_MAX 的数字被解析器接受并视为无穷大。
    • 修复了应提供强保证的 object 成员函数。
    • 修复了包含 boost/range.hppend 调用的歧义。
    • 修复了 ASan 故障。
    • 修复了 error::size_mismatch 的错误消息。
    • 修复了转换为具有 const 元素的元组。
  • Locale:
    • 消息目录文件中不再支持位/二进制运算符(左/右移位、二进制与/或/异或/非),以匹配 GNU gettext 行为
    • Windows 上的 Std 后端在请求的区域设置不存在时使用经典区域设置而不是系统区域设置(现在与其他操作系统相同)
    • localization_backend_manager::get 已弃用,请改用生成器
    • 新的转换器类作为 to_utf/from_utf/between 的替代方案
    • 修复了格式字符串中无效索引上的 UB
    • 修复了在没有 ICU 的 Windows 上将 UTF 转换为例如 iso-2022-jp
    • long long 用作复数翻译的计数参数
    • 修复了某些类的可移动性和异常规范
  • Log:
    • 修复了 text_file_backend 中可能出现的无限循环,当格式化的日志记录的大小超过 rotation_size 限制时。 (#209)
  • Math:
    • 添加了 Daubechies 尺度函数傅里叶变换的数值评估 921
    • 为统计分布添加了 logcdf 函数 946
    • 添加了对 C++23 的 <stdfloat> 类型的支持 978
    • 修复了各种 -Wmaybe-uninitialized 警告
    • 修复了不可表示数字的 roundtrunc 函数 968
    • 修复了 F 分布的模式计算 976
    • 修复了 beta 分布中的溢出 977
    • 修复了超几何分布中的溢出 987
    • 修复了非零中心的中值绝对偏差计算 997
  • Mp11:
    • mp_from_sequencemp_iotamp_iota_c 添加了 offset/from 参数。
    • 添加了 mp_valuemp_list_vmp_rename_vmp_is_value_list
    • <boost/mp11/list.hpp> 中的原语添加了值列表支持。
    • mp_repeatmp_fillmp_atmp_backmp_takemp_pop_backmp_dropmp_insertmp_erase 添加了值列表支持。
  • Multi-index Containers:
    • 更新了非唯一有序索引中的范围 insert,以保留等效元素的插入顺序 (问题 #68)。
    • 序列化现在使用 std::size_t 而不是 unsigned long 来保存和加载 multi_index_container 的大小 (在 LLP64 数据模型中,unsigned long 小于 std::size_t)。 multi_index_container 序列化 类版本已从 3 提升到 4 以反映此更改。
  • Multiprecision:
    • 修复了有理数适配器除法中的错误 542
    • 修复了多线程环境中全局精度更改的处理 552
    • 修复了 cpp_int::eval_convert_to noexcept 规范 555
  • MySQL:
    • 重大更新。
    • 现在完全支持存储过程,包括生成数据的 SELECT 语句和带有 OUT 参数的过程。
    • 添加了对多查询的支持,允许通过一次调用运行多个分号分隔的语句。
    • 添加了静态类型接口,允许使用 Boost.Describe 结构和元组将查询结果解析为用户提供的类型。
    • 现在可以使用新的 connection::executeconnection::start_execution 函数(及其异步对应项)执行文本查询和预准备语句。这些函数取代了 connection::queryconnection::execute_statementconnection::start_queryconnection::start_statement_execution。新函数允许访问新功能,例如静态接口。
    • 添加了单独的编译模式以帮助减少构建时间。源文件包含在 boost/mysql/src.hpp 中,必须包含在一个转换单元中。
    • 现在可以使用迭代器对来指定参数来执行预准备语句,使用 statement::bindconnection::execute。这使得参数的数量和类型在编译时未知的情况成为可能。
    • 预准备语句执行现在接受 boolstd::optionalboost::optional 类型的参数。
    • 添加了错误代码并验证了与 MySQL v8.0.33 和 MariaDB v11.0 的兼容性。
    • 修复了 Windows 的 min()max() 宏的潜在问题。
    • 所有断言现在都使用 Boost.Assert
    • 所有异常现在都通过 Boost.ThrowException 抛出。
    • 立即完成现在已通过 I/O 对象执行器正确调度。
  • Ratio:
    • 将默认 BOOST_RATIO_VERSION 更改为 2。
    • BOOST_RATIO_EXTENSIONS 的支持现已弃用,并且当 Boost.Ratio 以标准 <ratio> 头文件的形式实现时,最终将被删除。
  • Test:
    • 向 CI 系统添加了其他旧平台(例如 GCC 4.6)
    • 修复了 uintptr_t 的处理,以确保它在 32 位系统上是可移植的 353
    • 修复了来自 -Wdeprecated-copy-dtor-Wdeprecated-copy-with-user-provided-dtor 的警告 375
    • 修复了 C++23 <stdfloat> 类型的 check_is_close 处理 382
  • Timer:
    • 移除对 Boost.Chrono、Boost.System 和其他库的依赖。
    • 禁用已弃用的头文件,除非定义了 BOOST_TIMER_ENABLE_DEPRECATED
  • Unordered:
    • 重大更新。
    • 添加了 boost::concurrent_flat_map,一个基于开放寻址的快速、线程安全的哈希图。
    • 加速了开放寻址容器的迭代。
    • 在开放寻址容器中,erase(iterator) 之前不返回任何内容,现在返回一个可转换为指向下一个元素的迭代器的代理对象。 这使得典型的 it = c.erase(it) 惯用法成为可能,而当不使用返回的代理时,不会产生任何性能损失。
  • URL:
    • parse_query 不会重新创建 string_view。 (#757)
    • url_view/string_view 构造函数需要非 url_view_base。 (#756)
    • IP-literal 可以是 IPv6addrz。 (#711)
  • UUID:
    • 改进了为 AVX 目标生成的 x86 代码。 删除了在 SSE3 目标上使用 lddqu 指令,这会降低 Intel NetBurst CPU 的性能,但在 Skylake 及更高版本的 CPU 上更佳。 (PR#138)
  • Variant2:
    • 添加了 uses_double_storage()

更新的工具

测试的编译器

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 管理了此版本。