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_refconst 限定类型的编译。请注意,即使是 const 限定的原子对象也必须驻留在读写内存中。(#62)
  • Chrono:
    • 删除对已弃用的 Boost.Ratio 功能的使用。
  • Compat:
    • 添加了 latch.hpp,这是 std::latch 的实现(由 Christian Mazakas 贡献)。
    • 添加了 shared_lock.hpp,这是 std::shared_lock 的(部分)实现(由 Christian Mazakas 贡献)。
  • Core:
    • 添加了对不完整类型的 boost::core::type_name 的支持。
    • boost/core/bit.hpp 中的位操作函数现在在最新的 MSVC 版本(VS2019 更新 5 及更高版本)上是 constexpr
    • boost/core/bit.hpp 添加了 boost::core::byteswap(来自 C++23 的 std::byteswap 的实现)。
    • 将 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 的替代方案
    • 修复格式化字符串中无效索引导致的未定义行为
    • 修复在没有 ICU 的 Windows 上将 UTF 转换为 iso-2022-jp 等编码的问题
    • 使用 long long 作为复数翻译的计数参数
    • 修复某些类的可移动性和异常规范
  • 日志:
    • 修复了 text_file_backend 中可能出现的无限循环问题,当格式化日志记录的大小超过 rotation_size 限制时。( #209 )
  • 数学:
    • 添加了对 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 添加了值列表支持。
  • 多索引容器:
    • 更新了非唯一有序索引中的范围 insert,以保留等效元素的插入顺序(问题 #68)。
    • 现在,序列化使用 std::size_t 而不是 unsigned long 来保存和加载 multi_index_container 的大小(在 LLP64 数据模型中,unsigned long 小于 std::size_t)。为了反映此更改,multi_index_container 序列化 类版本 已从 3 增加到 4。
  • 多精度:
    • 修复了有理数适配器除法中的错误 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> 头文件实现时,最终将被删除。
  • 测试:
    • 向 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
  • 定时器:
    • 删除对 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 管理了此版本。