Boost C++ 库

……世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

版本 1.53.0

版本 1.53.0

2013年2月4日 18:29 格林尼治标准时间

文档

下载
平台文件
unixboost_1_53_0.tar.bz2
boost_1_53_0.tar.gz
windowsboost_1_53_0.7z
boost_1_53_0.zip

新增库

  • Atomic: C++11 风格的 atomic<>,由 Helge Bahmann 编写,Tim Blechmann维护。
  • Coroutine: 协程库,由 Oliver Kowalke 编写。
  • Lockfree: 无锁数据结构,由 Tim Blechmann 编写。
  • Multiprecision: 由 John Maddock 和 Christopher Kormanyos 编写的扩展精度算术类型,用于浮点数、整数和有理数运算。
  • Odeint: 求解常微分方程,由 Karsten Ahnert 和 Mario Mulansky 编写。

新闻

此版本包含对 Boost.Locale 中工单 #7743 的修复。更多详情,请参见安全公告

更新的库

  • 算法:
    • 修复注释中的非ASCII字符(#7781)。
    • 更新了 Knuth-Morris-Pratt 文档(#7656)。
  • 数组:
    • 添加了对 boost::get 和 std::get 的支持(#7652)
  • Asio:
    • 修复了一些 64 位到 32 位转换警告(#7459)。
    • 修复了文档和注释中的一些小错误(#7761)。
    • 修复了basic_socket::get_option文档中嵌入示例中的错误(#7562)。
    • 将 SSL_CTX 选项改为使用long而不是int,以匹配 OpenSSL(#7209)。
    • 改为使用_snwprintf来解决由于最新版本的 MinGW 中swprintf签名更改而导致的编译错误(#7373)。
    • 修复了在 Windows 上关闭io_service线程池时由于工作耗尽而可能发生的死锁(#7552)。
    • 为错误类别启用了noexcept限定符(#7797)。
    • 将 UNIX 域套接字示例更改为将accept的错误视为非致命错误(#7488)。
    • 添加了一个小的块回收优化,以改进默认内存分配行为。
  • Bimap:
    • 重构 map_view_iterator 以改进错误消息。
    • 修复了在使用带信息的关联时replace_(left/right/key/data)的错误。
    • 修复了 vector_of 和 list_of 视图assign(size_type,value_type)错误。
    • 修复了 vector_of 视图operator[](size_type)at(size_type)函数的返回值。
  • Chrono:
    • 已弃用
      • Boost.Chrono 1.2.x 中包含的 chrono i/o 版本已在 2.0.0 版本中进行了完全重构。
      • chrono I/O: __duration_short、__duration_long 操纵器已弃用。应使用参数化形式 __duration_fmt 或重命名的操纵器 __duration_symbol 和 __duration_prefix。
      • chrono I/O: __duration_punct<> facet 已弃用。应使用 __get_duration_style 自由函数获取信息,并使用 __duration_units facet 用于本地化目的。
      • 当 BOOST_CHRONO_VERSION==2 时,上述已弃用的函数不可用。
    • 修复
      • #7546 time_point<system_clock> 输出版本 2 无法编译
      • #7547 time_point<system_clock> 输入版本 2 无法编译
      • #7868 chrono_io 解析时间不正确 (1.53 和 1.52)
  • 容器:
    • 修复了错误 #7650
    • 改进了vector的插入性能。
    • 再次更改了实验性多分配接口以提高性能(仍然是实验性的)。
    • 为那些希望在编译器中禁用异常的用户添加了无异常支持。
    • 修复了 GCC -Wshadow 警告。
    • 将已弃用的 BOOST_NO_XXXX 宏替换为较新的 BOOST_NO_CXX11_XXX 宏。
  • 上下文:
    • 添加了对 ARM 上 iOS 和 x86 (32 位) 上 MacOS X 的支持。
    • 支持 Win32 上的 SEH 覆盖保护。
  • 几何:
    • 错误修复
      • 避免生成内部环小于最小大小(例如,一个或两个点)的输出多边形。
      • 退化线段的geometry::disjoint(由 Karsten Ahnert 修补)。
      • geometry::difference中缺少切线处理的问题,由 H2 报告。
      • 修复了与 Lambda 一起使用时的geometry::for_each
      • 修复了点线串(以及范围、多边形)的geometry::comparable_distance
    • 附加功能
      • geometry::disjoint的组合:点/环、点/多边形、点/多面体。
      • geometry::intersects的组合:点/环、点/多边形、点/多面体。
    • 内部更改
      • 各种算法的专门化/未实现的更新(与早期版本一样,这些更改仍在进行中;它们负责简化结构、改进错误报告和自动化文档)。
      • 单元测试中的修复。
  • GIL:
    • 修复了自我赋值警告(#4919)。
  • 图形:
    • 修复了来自 Trac 的以下错误:#3468#4386#5269#7428#7457#7467#7600#7648#7684#7728#7741#7766#7771#7773#7780#7787#7801以及其他不在 Trac 中的错误。
    • 添加了对读取包含多个图的 GraphML 文件的支持。
    • 添加了专门针对树的 A* 搜索版本,在可接受多次访问同一顶点的情况下,无需颜色映射。
    • 添加了 VF2 子图同构算法(由 Flavio De Lorenzi 贡献)。
  • 哈希:
    • 添加了对boost::int128_typeboost::uint128_type(如果可用)的支持。
    • 在已知具有标准浮点函数的平台上,不要使用自动检测(#7221#7470)。
  • 进程间:
    • 修复了 GCC -Wshadow 警告。
    • 实验性多分配接口改进并再次更改。仍然不稳定。
    • 将已弃用的 BOOST_NO_XXXX 宏替换为较新的 BOOST_NO_CXX11_XXX 宏。
    • ABI 破坏:更改节点池分配器的内部结构以提高效率。
    • 修复了错误 #7795
  • 侵入式:
    • 修复了错误 #7174#7529#7815
    • 修复了 GCC -Wshadow 警告。
    • 在几个侵入式容器构造函数中添加了缺少的explicit关键字。
    • 将已弃用的 BOOST_NO_XXXX 宏替换为较新的 BOOST_NO_CXX11_XXX 宏。
    • 少量文档修复。
  • 词法转换:
    • 用于用户定义类型的新字符类型检测算法 #6786
    • 文档更新(#7582#7831)。
    • 修复了与 std::array 相关的错误 #7799
    • 修复了使用 -ftrapv 和数值到数值转换时的编译问题 #7814
  • 区域设置:
    • 安全相关的错误修复,一些无效的 UTF-8 序列被接受为有效 #7743
    • 使用了无效的 Windows 代码页名称 #7386
    • 修复了由于 Doxygen 格式错误导致的文档缺失 #7734
    • 修复了一些地方缺少的 std:: #7701
    • 拼写、语法、错字修复 #7368#7762
  • 数学:
    • 修复了问题 #7325#7415#7416#7183#7649#7694#4445#7492
    • 修复了在双样本学生 t 示例中计算合并标准差时的错误 #7402
    • 改进复杂的 acos/asin/atan,参见 #7290#7291
    • 在 cyl_bessel_j 和 gamma_p/gamma_q 的一些极端情况下提高了精度,这要感谢 Rocco Romeo 的建议。
    • 在具有整数阶的 Bessel J 和 Y 中提高精度,这要感谢 Rocco Romeo 的建议。
  • MinMax:
    • 修复了逗号运算符的误用(#7752)。
    • 更新了文档以修复损坏的链接(#7751)。
  • 移动:
    • 更好的头文件分离(错误 #6524)。
    • 少量文档修复
    • 将已弃用的 BOOST_NO_XXXX 宏替换为较新的 BOOST_NO_CXX11_XXX 宏。
    • 修复了 #7830#7832
  • 多边形:
    • 修复
      • #6366 polygon_90 类型的boost::polygon::contains中的错误。
      • #7678 通过多个#include多次定义bool boost::polygon::belongs(...)
    • 内部更改
      • 重构了点/线段/区间数据/概念/特性。
      • 为点和区间数据/概念/特性添加了单元测试。
      • 简化了transform.hpp以仅在 2D 中运行。
      • 删除了 point_3d 数据/概念/特性。
  • 随机数:
    • 现在可以在禁用异常的情况下编译(#5399)。
  • 范围:
  • 比率:
    • 修复
      • #7616 br_mul::nan - 警告 C4293:'<<':移位计数为负或过大,行为未定义。
  • Regex: 已修复问题:#7744#7644
  • 智能指针:
    • 新功能
      • Glen Fernandes 提供了用于数组的 `make_shared` 和 `allocate_shared` 的实现。它们实现了数组的单次分配,可以使用构造函数参数或初始化列表进行初始化,并且还包含用于默认初始化和无值初始化的重载。更多信息请参见“用于数组的 make_shared 和 allocate_shared”页面。
      • 现在可以使用shared_ptr 来持有指向动态分配数组的指针。这是通过使用数组类型(T[]T[N])作为模板参数来实现的。
      • 智能指针现在在 C++11 编译器上使用explicit operator bool。这可能会破坏将智能指针传递给接受bool类型的函数的代码,或者从返回bool类型值的函数返回智能指针的代码。在这种情况下,请使用p != 0!!p
  • StringAlgo:
    • 修复了一个无法找到重叠模式的错误(#7784)。
    • 消除了对 insert 的一些歧义调用(#7346)。
  • 线程:
    • 已弃用的特性
      • 自 Boost 1.53 起已弃用的特性,仅在 Boost 1.58 之前可用。
      • C++11 兼容性:`packaged_task<R>` 已弃用,请改用 `packaged_task<R()>`。
      • #7537 弃用 `Mutex::scoped_lock` 和 `scoped_try_lock` 以及 `boost::condition`
    • 新功能
      • #6270 C++11 兼容性:添加从可移动的可调用对象和可移动参数创建线程的构造函数
      • #7279 C++11 兼容性:在系统相关函数中添加 `noexcept`
      • #7280 C++11 兼容性:添加 `promise::...at_thread_exit` 函数
      • #7281 C++11 兼容性:将 `ArgTypes` 添加到 `packaged_task` 模板。
      • #7282 C++11 兼容性:添加 `packaged_task::make_ready_at_thread_exit` 函数
      • #7412 C++11 兼容性:添加从可移动的可调用对象和可移动参数创建异步任务的函数
      • #7413 C++11 兼容性:当启动策略为延迟时添加异步支持。
      • #7414 C++11 兼容性:`future::get` 的后置条件应为 `valid()==false`。
      • #7422 提供一个具有零开销性能损耗的条件变量。
      • #7444 异步:添加 `make_future`/`make_shared_future`。
      • #7540 线程:添加一个在析构时连接线程的辅助类。
      • #7541 线程:添加一个在析构时连接的线程包装器类。
      • #7575 C++11 兼容性:由 `async` 创建的 `future` 应在其析构函数中“连接”。
      • #7587 同步:添加 `strict_lock` 和 `nested_strict_lock`。
      • #7588 同步:将 `locks.hpp` 分割成多个文件以限制依赖项。
      • #7590 同步:添加基于 Boost.ConceptCheck 的可锁定概念检查器。
      • #7591 添加可用于 `enable_if` 的可锁定特性。
      • #7592 同步:添加一个无操作的 `null_mutex`,它是 `UpgardeLockable` 的模型。
      • #7593 同步:添加一个 `externally_locked` 类。
      • #7594 线程:允许禁用线程中断。
    • 已修复的错误
      • #7464 `BOOST_TEST(n_alive == 1);` 由于回归测试工具中的竞争条件而失败。
      • #7657 如果反复使用 `condition_variable` 方法 `notify_one` 或 `notify_all`,则会严重影响性能和内存消耗。
      • #7665 `this_thread::sleep_for` 不再在线程中使用 `steady_clock`。
      • #7668 `thread_group::join_all()` 应该检查其线程是否可连接。
      • #7669 `thread_group::join_all()` 应该捕获 `resource_deadlock_would_occur`。
      • #7671 在 iOS 上包含 `boost/thread.hpp` 头文件时出错。
      • #7672 `lockable_traits.hpp` 语法错误:“defined” 标记拼写错误。
      • #7798 `boost::future set_wait_callback` 线程安全问题。
      • #7808 `this_thread::sleep_for` 和 `this_thread::sleep_until` 的效果描述不正确。
      • #7812 返回值:如果调用由于 `rel_time` 指定的时间段已过而返回,则返回 `cv_status::no_timeout`,否则返回 `cv_status::timeout`。
      • #7874 编译警告:`thread.hpp:342: warning: type attributes are honored only at type definition`。
      • #7875 `BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED` 不应默认启用。
      • #7882 `condition_variable::wait(unique_lock<mutex>&)` 返回的异常文本错误。
      • #7890 `thread::do_try_join_until()` 缺少返回类型。
  • 无序:
    • 删除对旧的预标准可变参数对构造函数和相等性实现的支持。两者自 Boost 1.48 起已被弃用。
    • 更多的内部实现更改,包括更简单的 `erase` 实现,并删除了更多已弃用的配置宏。
  • 实用程序:
    • 添加了 string_ref,一个指向连续字符序列的非拥有引用。
  • 变体:
    • 添加了右值构造函数和右值赋值运算符(仅适用于 C++11 兼容编译器)。库现在可以与仅限移动的类型一起使用(#7620#7718)。
  • Wave:
  • xpressive:
    • 适应最近的智能指针更改(#7809)。

更新的工具

已测试的编译器

Boost 的主要测试编译器是:

  • Linux
    • GCC:4.1.2、4.2.4、4.4.4、4.5.3、4.6.3、4.7.2
    • GCC,C++11 模式:4.4.4、4.5.3、4.6.3、4.7.2
    • Intel:11.1、12.1
    • LLVM Clang:2.8
    • LLVM Clang,带 libc++:3.2
  • OS X
    • GCC:4.4.7
    • GCC,C++11 模式:4.4.4
    • Intel:11.1、12.0
  • Windows
    • Visual C++:9.0、10.0
  • FreeBSD
    • GCC:4.2.1,32 位和 64 位

Boost 的其他测试编译器包括:

  • Linux
    • Cray:4.6.1
    • Clang:来自 Subversion
    • LLVM Clang,带 libc++:3.2
    • GCC:4.2.4、4.4.4、4.5.3、4.6.3、4.7.1
    • GCC,C++11 模式:4.4.4、4.5.3、4.6.3、4.7.1、4.7.2
    • pgCC:11.9
    • Intel:10.1、11.1、12.1
    • Intel,C++11 模式:13.0.1
    • Visual Age
  • OS X
    • Clang:来自 Subversion
    • Clang,C++11 模式:来自 Subversion
    • Intel:11.1、12.0
    • GCC:4.4.7
    • GCC,C++11 模式:4.4.4
  • Windows
    • Visual C++:10.0、11.0
    • Visual C++,带 STLport:9.0
    • Visual C++,Windows Mobile 5,带 STLport:9.0
  • AIX
    • IBM XL C/C++ Enterprise Edition:V12.1.0.1

致谢

Beman Dawes、Eric Niebler、Rene Rivera、Daniel James、Vladimir Prus 和 Marshall Clow 负责此版本的管理。