Boost C++ 库

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

版本 1.54.0

版本 1.54.0

2013 年 7 月 1 日 17:10 GMT

文档

下载
平台文件
unixboost_1_54_0.tar.bz2
boost_1_54_0.tar.gz
windowsboost_1_54_0.7z
boost_1_54_0.zip

补丁

这些是库作者提供的补丁,发现得太晚以至于无法在 1.54.0 版本中修复。请小心,因为它们尚未经过正常的测试流程。

新闻

支持的 CPU

Boost 不再支持 80386 目标 CPU,最低 x86 32 位目标是 i486。即使在此版本之前,Boost.SmartPtrBoost.Atomic(以及内部使用它们的库)也未正确支持 80386 目标。某些 Boost 库可能对最低目标 CPU 有更高的要求(例如 Boost.Log),有关详细信息,请参阅相应的库文档。

此外,默认情况下,当为 x86 32 位目标构建 Boost 时,它将为 i686 (Pentium Pro) 和更高版本的 CPU 编译。这可以通过在instruction-set属性中指定来更改b2bjam命令行,例如

b2 variant=release architecture=x86 instruction-set=i486 stage

的可能值instruction-set

  • 主机 CPU 的目标native
  • 通用 x86 CPUi486, i586, i686
  • 英特尔 CPUpentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium3m, pentium-m, pentium4, pentium4m, prescott, nocona, core2, corei7, corei7-avx, core-avx-i, conroe, conroe-xe, conroe-l, allendale, merom, merom-xe, kentsfield, kentsfield-xe, penryn, wolfdale, yorksfield, nehalem, sandy-bridge, ivy-bridge, haswell, atom
  • AMD CPUk6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, k8, opteron, athlon64, athlon-fx, k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, barcelona, bdver1, bdver2, bdver3, btver1, btver2
  • VIA CPUc3, c3-2
  • IDT CPUwinchip-c6, winchip2

请注意,并非所有这些值都可能受特定编译器的支持。

信号已弃用

Boost.Signals 不再积极维护,因此已被弃用。请勿在新开发中使用 Boost.Signals(请改用 Boost.Signals2)。如果您有现有的基于 Boost.Signals 的代码,它将继续工作,但请考虑迁移到 Boost.Signals2。Signals2 文档中有一个 移植指南

新库

  • Log: 日志库,来自 Andrey Semashev。
  • TTI: 类型特征内省库,来自 Edward Diener。
  • Type Erasure: 基于概念的运行时多态。

更新的库

  • Accumulators:
    • 修复了注释中的拼写错误 (#7917)
    • 消除未使用的变量警告 (#6926)
  • Algorithm:
    • `copy_while` 和 `copy_until` 的返回类型已更改。这是一个接口更改。如果您正在使用这些函数的返回值,则必须修改您的代码。这些函数现在返回 `std::pair<InputIterator, OutputIterator>`,而不仅仅是返回修改后的 OutputIterator。如果此更改影响了您的代码,最简单的更改是在调用的末尾添加 .second,这将使您获得与之前相同的行为。
    • 添加了 C++14 版本的 'is_permutation'、'equal' 和 'mismatch'。
  • Any:
    • 添加了 C++11 功能支持 #6999
      • 移动赋值和移动构造函数。
      • 添加了 noexcept 修饰符。
  • Asio:
    • 添加了新的 traits 类,handler_typeasync_result,允许自定义启动函数的返回类型。
    • 添加了 asio::spawn() 函数,这是一个用于运行 stackful 协程的高级包装器,基于 Boost.Coroutine 库。spawn() 函数使程序能够以同步方式实现异步逻辑。例如:size_t n = my_socket.async_read_some(my_buffer, yield);
    • 添加了 asio::use_future 特殊值,它为从异步操作的启动函数返回 C++11 std::future 提供了第一类支持。例如:future<size_t> n = my_socket.async_read_some(my_buffer, asio::use_future);
    • 将 stackless 协程类和宏提升为 Asio 文档化接口的一部分,而不是 HTTP 服务器 4 示例的一部分。
    • 添加了一个名为 asio_handler_is_continuation 的新处理程序钩子。异步操作可能表示与当前正在执行的处理程序关联的异步控制流的延续。如果情况如此,可以自定义 asio_handler_is_continuation 钩子以返回 true,Asio 的实现可以使用此知识来优化新处理程序的调度。为了涵盖常见情况,Asio 为 strands、spawn() 和组合异步操作自定义了钩子。
    • 添加了四个新的通用协议类,generic::datagram_protocolgeneric::raw_protocolgeneric::seq_packet_protocolgeneric::stream_protocol,它们实现了 Protocol 类型要求,但允许用户在运行时指定地址族(例如 AF_INET)和协议类型(例如 IPPROTO_TCP)。
    • 添加了 C++11 移动构造函数,允许将套接字(或 acceptor)转换为更通用的类型。例如,可以通过移动构造将 ip::tcp::socket 转换为 generic::stream_protocol::socket
    • 扩展了 basic_socket_acceptor<> 类的 accept()async_accept() 函数,以允许将新连接直接接受到更通用类型的套接字中。例如,ip::tcp::acceptor 可以用于接受到 generic::stream_protocol::socket 对象中。
    • 将现有示例移动到 C++03 特定目录中,并为 C++11 特定示例添加了一个新目录。C++03 示例的有限子集已转换为其 C++11 等效项。
    • 各种 SSL 增强功能。感谢 Nick Jones,这些更改基于他的工作。
      • 添加了对 SSL 握手的支持,该握手重用已从线路读取的数据。添加了 ssl::stream<> 类的 handshake()async_handshake() 函数的新重载。这些重载接受 ConstBufferSequence 作为握手过程的 ssl 引擎的初始输入。
      • 添加了对创建 TLSv1.1 和 TLSv1.2 ssl::context 对象 的支持。
      • ssl::contextssl::stream<> 类添加了 set_verify_depth() 函数。
      • 添加了从内存缓冲区加载 SSL 证书和密钥数据的能力。新的函数 add_certificate_authority()use_certificate()use_certificate_chain()use_private_key()use_rsa_private_key()use_tmp_dh() 已添加到 ssl::context 类中。
      • 更改了 ssl::context 以默认自动禁用 SSL 压缩。要启用,请使用新的 ssl::context::clear_options() 函数,如 my_context.clear_options(ssl::context::no_compression)
    • 修复了 signal_set 实现中潜在的死锁。
    • 修复了文档中 acceptor 示例中的错误 #8421
    • 修复了 waitable timer 文档中的复制粘贴错误 #8602
    • 添加了断言以满足某些代码分析工具 #7739
    • 修复了格式错误的 #warning 指令 #7939
    • 修复了 Linux epoll 实现中潜在的数据竞争。
    • 修复了一个特定于 Windows 的错误,其中某些操作可能会生成具有无效(即 NULLerror_categoryerror_code #8613
    • 修复了 basic_waitable_timer 的底层实现,使其可以处理任何 time_point 值,而不会使中间 duration 对象溢出。
    • 修复了在同一 io_service 对象上并发调用 run()poll() 时可能发生的线程唤醒丢失问题 #8354
    • 修复了异步连接操作的实现,使其可以应对来自 reactor 的虚假就绪通知 #7961
  • Chrono:
    • 修复的 Bug
      • #8079 Chrono 内存泄漏
      • #8318 time_point 和 duration 的 BOOST_FORCEINLINE 构造函数
      • #8367 chrono 无法使用来自 XCode 4.5.2 的 clang 以及 -std=c++11 -stdlib=libc++ 和 -arch armv7 编译
      • #8370 chrono 参考文档中的错别字
      • #8435 由于没有 CLOCK_REALTIME 宏,无法在 HP-UX 上编译 Chrono。
  • Circular Buffer:
    • 修复了警告 (#8032)。
  • Container:
    • 添加了实验性的 static_vector 类,基于 Andrew Hundt 和 Adam Wulkiewicz 的高性能 varray 类。
    • 改进了 vector 构造函数/复制/移动/交换的速度,尽可能调度到 memcpy。
    • 支持 BOOST_NO_EXCEPTIONS #7227
    • 修复了 bug #7921#7969#8118#8294#8553
  • Context:
    • 添加了对 SPARC 架构的支持。
  • Coroutine:
    • 添加了对分段堆栈(堆栈按需增长)的支持。
    • #7805 错别字
    • #7972 GCC 警告
    • #7988 C++11 range-for
    • #8023 使用迭代器 traits
    • #8024 创建 const_iterator
    • #8101 迭代器的后缀 operator++
    • #8526 内存泄漏
    • #8544 调用托管 DLL
  • Geometry:
    • 附加功能
      • 添加了空间索引,由 Adam Wulkiewicz 为 Boost.Geometry 开发。空间索引最初由 Federico J. Fernandez 在 2008 年 Google Summer of Code 计划期间启动,由 Hartmut Kaiser 指导。
      • 添加了 SVG 输出,这已经在扩展中存在了几年
    • 文档
      • 小的单词遗漏修复
    • Bug 修复
      • 共线相反的线段有时(在圆中)存在鲁棒性问题,已修复
      • 修复了错误插入的交点(由 buffer 发现)
      • 应用了 Vladimir Petrovic 提供的用于调试遍历的补丁
    • 解决的 tickets
      • 7462 float 的退化 union 结果,已修复
      • 7465 scale_transformer 类中错误的构造函数访问类型,已修复
      • 7802 cart_intersect.hpp 未使用的参数警告,已修复
      • 8254 错误的交点,已修复
      • 8393 polygon 模型不遵守声明的 Polygon 概念规则,文档已更新。
      • 8403 消除了编译器警告 C4127:条件表达式是常量
      • 8405 消除了编译器警告 C4189:'...' : 局部变量已初始化但未被引用
    • 内部更改
      • 使几个算法变体感知 (append, area, clear, convert, equals, length, num_points)
  • Graph:
    • 从 Trac 修复的 Bug:#6780, #7016, #7155, #7845, #7863, #7877, #8166, #8192, #8398, #8411, #8427, #8428, #8434, #8490, #8681
    • 从 Jakob Lykke Andersen 和 Flavio De Lorenzi 添加了对 VF2 子图同构的更新。
    • 从 Fernando Vilas 添加了最大邻接搜索。
    • 从 Brammert Ottens 向资源受限的最短路径 (r_c_shortest_paths) 算法添加了超时支持。
    • 对文档和示例进行了各种修复,并删除了过时的编译器解决方法。
  • Interprocess:
    • 为 mapped_region 添加了对平台特定标志的支持 (ticket #8030)
    • 修复了 bug #7484, #7598, #7682, #7923, #7924, #7928, #7936, #8521, #8595
    • ABI 破坏性更改:更改了 Windows 中的 bootstamp 函数,以使用 EventLog 服务启动时间作为系统启动时间。以前使用的来自 WMI 的 LastBootupTime 在时间同步和休眠方面不稳定,在实践中无法使用。如果您确实需要获得 Boost 1.54 之前的行为,请从命令行或 detail/workaround.hpp 定义 BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME
  • Intrusive:
    • 添加了 BOOST_NO_EXCEPTIONS 支持 (bug #7849)。
  • Iostreams:
    • tee 现在可以正确地用于 std::streams (#8315)。
    • 文档修复 (#8385, #8460)。
    • 避免来自 Clang 的 -Wimplicit-fallthrough 的警告 (#8482)。
  • Lexical cast:
    • 转换为字符指针现在触发编译时断言而不是运行时 #8334
    • Lexical cast 现在能够转换 boost::int128_typeboost::uint128_type #7909
    • 更改了内部流缓冲区处理,现在可以与 libc++ 一起使用 #8267, #7704
    • 恢复了获取在 1.53.0 中被破坏的 lexical_cast 函数的地址 #7421
    • 修复了警告、内部结构和测试 #2558, #7949, #8162, #8369, #8547
  • Math:
    • 进行了重大重组,以整合其他 Boost.Math 库,如整数工具(最大公约数和最小公倍数)、四元数和八元数。创建新的章节标题。
    • 添加了许多对 Boost.Multiprecision 和 cpp_dec_float_50 的引用,作为用户定义类型 (UDT) 的示例。
    • 将 Clang 添加到支持的编译器列表中。
    • 修复了常量,使其在使用任意精度时使用计算值的线程安全缓存。
    • 添加了查找 Bessel 函数零点的功能 cyl_bessel_j_zerocyl_neumann_zeroairy_ai_zerosairy_bi_zeros(由 Christopher Kormanyos 提供)。
    • Rocco Romeo 对 Bessel J 和 Y 函数进行了更多精度改进。
    • 修复了导致某些头文件无法编译的讨厌的循环依赖性 bug #7999
    • 修复了 __tgamma 中的 bug,该 bug 导致参数在 142.5 到 143 之间时出现虚假的溢出。
    • 修复了 raise_rounding_error 中的 bug,该 bug 导致在关闭异常抛出时返回不正确的结果 #7905
    • 添加了最小的 __float128 支持。
    • 修复了 poisson quantile 的边缘情况 bug #8308
    • 调整了 Halley 迭代中使用的启发式方法,以应对在导数趋于平缓的棘手区域中反转不完全 beta 函数的情况。示例是计算概率小于机器 epsilon 的 Fisher F 分布的分位数。请参阅 ticket #8314
  • Meta State Machine:
    • Bug 修复:Exit points 对于 favor_compile_time 策略已损坏。
    • Bug 修复:复制破坏了子子状态机的 exit points。
    • Bug 修复:#8046
  • Move:
  • Multiprecision:
    • 破坏性更改:将 rational_adapter 重命名为 rational_adaptor
    • 添加了对 MPFI 的支持。
    • 添加了 logged_adaptor。
    • 通过 GCC 的 __float128 或 Intel 的 _Quad 数据类型添加了对 128 位浮点数的支持。
    • 在 cpp_int 中添加了对用户定义字面量的支持,改进了 constexpr 支持。
    • 修复了 cpp_int 整数除法中的 bug,当两个参数都足够小以容纳在 double_limb_type 中时,该 bug 会导致 cpp_int 的符号不正确。请参阅 8126
    • 修复了 cpp_int 中单个 limb 减法的 bug,当结果的最后一个 limb 应为 0 时,该 bug 会导致值不正确:8133
    • 修复了 cpp_int 中的 bug,其中 0 除以某物不会在结果中得到零:8160
    • 修复了某些超越函数中的 bug,这些 bug 在变量被重用时导致不正确的返回值,例如 a = pow(a, b)。请参阅 8326
  • Polygon:
    • Voronoi 文档的更新和修复。
    • 从 Trac 修复的 Bug:#8026, #8197, #8257
  • PropertyMap:
    • 添加了来自 Guillaume Pinot 的 compose_property_map
  • Range:
    • Bug 修复
      • #6944 某些 Range 概念使用不正确的 Iterator 概念
      • #7407 istream_range 无法使用 wcin 编译
      • #7408 istream_range 不应拉取 istream
      • #7731 当 step_size 为 3 或更大时,irange 无法正确结束迭代
      • #7827 [range] 无法将 r | indexed 编译为 range 算法
      • #8338 迭代器 range 不适用于指向数组的指针作为迭代器
      • #8453 不正确的配置宏 BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION
  • Signals:
    • 不再积极维护,因此已被弃用。对于新开发,请使用 Signals2
  • Thread:
    • 新功能
      • #7285 C++11 兼容性:允许为 call_once 传递可移动参数。
      • #7445 Async: 添加 future<>.then
      • #7449 Synchro: 添加同步值类
    • 修复的 Bug
      • #4878 MinGW 4.5.0 未定义对 bool interruptible_wait(detail::win32::handle handle_to_wait_for,detail::t imeout target_time) 的引用。
      • #4882 Win32 shared_mutex 未正确处理超时。
      • #5752 boost::call_once() 在某些平台上不可靠
      • #6652 Boost.Thread shared_mutex.hpp:50:99: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
      • #6843 [Intel C++] 使用 '#include <atomic>' 的编译错误
      • #6966 future boost::future_category 不一致的 dll 链接
      • #7720 在密集锁定/解锁互斥锁时出现异常 lock_error
      • #7755 Thread: Windows 上 shared_mutex 的死锁
      • #7980 构建错误:msvc-11.0 和 BOOST_THREAD_DONT_USE_DATETIME
      • #7982 AIX 上的 pthread_delay_np() parm 编译错误
      • #8027 thread 库无法使用 Visual Studio 2003 编译
      • #8070 优先使用 GetTickCount64 而不是 GetTickCount
      • #8136 boost::this_thread::sleep_for() 在 Windows 中睡眠时间过长
      • #8212 Boost thread 在 Solaris 10 上的编译错误
      • #8237 修复 'thread_group' 的文档
      • #8239 barrier::wait() 未标记为 interruption_point
      • #8323 boost::thread::try_join_for/try_join_until 可能由于 Boost.Thread 和 Boost.Chrono 中的问题组合而无限期阻塞
      • #8337 "std::string(this->code()->message())" 的内部表示逃逸,但在退出作用域时被销毁。
      • #8371 当 constexpr 不可用时启用 C++11 once_flag
      • #8443 头文件包含顺序可能导致崩溃
      • #8451 缺少文档化的函数 'boost::scoped_thread::joinable'
      • #8530 [Coverity] 未使用的变量 thread_handle,thread/pthread/thread_data.hpp 中未初始化的变量 cond_mutex
      • #8596 启用 C++0x 后,boost::packaged_task 存储对函数对象的引用,而不是副本。
  • Type Traits:
    • 实现了新的类型特征 #8189
      • is_nothrow_move_constructible
      • is_nothrow_move_assignable
      • has_trivial_move_assign
      • has_trivial_move_constructor
  • uBLAS:
    • #6511 标量除法应使用 enable_if<>
    • #7297 使自由函数 'num_columns' 和 'num_rows' 支持 uBLAS traits 系统,并更好地与表达式类型一起工作
    • #6010 修复了 assignment.hpp 中的链接问题
    • 更新了文档
  • Unordered:
    • 一些非常基本的 noexcept 支持。
  • Utility:
    • 修复了 basic_string_ref::find (#8067)。
    • 修复了 string_ref 的逻辑运算符。
    • 为 C++11 更新了 noncopyable (#6578)。
    • 修复了在 DLL 接口中使用 noncopyable 时的编译器警告 (#6935)。
    • 修复了在 SolarisStudio 编译器上将 boost::addressofboost::function 一起使用的问题 (#7079)。
    • 禁用了关于运算符逗号的烦人的 MSVC 警告 (#7663)
  • Variant:
    • 现在使用来自 Boost.TypeTrait 的新类型特征来检测 noexcept 构造函数和赋值运算符 #8296。这将提高 C++11 中许多类型的 boost::variant 的性能。
    • 实现了多重访问 #8459
    • 文档已更新,以反映 C++11 功能支持。
  • Wave:
    • 有关详细信息,请参阅 Changelog
  • xpressive:
    • 删除未使用的变量,修复了 #8039
    • 避免与 glx.h 中的宏 None 发生名称冲突,修复了 #8204
    • 消除 gcc 警告,修复了 #8138

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3
    • GCC, C++98 模式: 4.7.3
    • GCC, C++11 模式: 4.7.2, 4.7.3, 4.8.0
    • Clang: 3.0, 3.1, 3.2
    • Clang, C++11 模式: 3.2
  • OS X
    • GCC: 4.2
    • Apple Clang: 4.2.1
    • Apple Clang, C++11 模式: 4.2.1
  • Windows
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
    • Visual C++: 8.0, 9.0, 10.0, 11.0
  • FreeBSD
    • GCC: 4.2.1

Boost 的其他测试编译器包括

  • Linux
    • Clang: 3.0, 3.1, 3.2, 来自 Subversion
    • Clang, 使用 libc++: 3.2
    • GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3
    • GCC, C++98 模式: 4.7.3
    • GCC, C++11 模式: 4.7.3, 4.8.0
  • OS X
    • Apple Clang: 4.2.1
    • Apple Clang, C++11 模式: 4.2.1
    • Clang: 来自 Subversion
    • Clang, C++11 模式: 来自 Subversion
    • GCC: 4.2
  • Windows
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
    • Visual C++: 9.0, 10.0, 11.0
    • Visual C++, Windows Mobile 5, 使用 STLport: 9.0
  • AIX
    • IBM XL C/C++ Enterprise Edition: 12.1.0.1
  • FreeBSD
    • GCC: 4.2.1

致谢

Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。