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。即使在此版本之前,80386 目标也没有被 Boost.SmartPtrBoost.Atomic(以及内部使用它们的库)正确支持。某些 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
  • Intel 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: 基于概念的运行时多态性。

更新的库

  • 累加器:
    • 修复注释中的拼写错误 (#7917)
    • 消除未使用的变量警告 (#6926)
  • 算法:
    • copy_while 和 copy_until 的返回类型已更改。这是一个接口更改。如果您使用了这些函数的返回值,则必须修改您的代码。这些函数现在返回一个 std::pair<InputIterator, OutputIterator>,而不是只返回修改后的 OutputIterator。如果此更改影响您的代码,最简单的更改是在调用的末尾添加一个 .second,这将使您获得与之前相同的行为。
    • 添加了 C++14 版本的 'is_permutation','equal' 和 'mismatch'。
  • Any:
    • 添加了 C++11 特性支持 #6999
      • 移动赋值和移动构造函数。
      • 添加了 noexcept 修饰符。
  • Asio:
    • 添加了新的特征类,handler_typeasync_result,允许自定义启动函数的返回类型。
    • 添加了 asio::spawn() 函数,这是一个用于运行基于 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);
    • 将无栈协程类和宏提升为 Asio 文档化接口的一部分,而不是 HTTP 服务器 4 示例的一部分。
    • 添加了一个名为 asio_handler_is_continuation 的新处理程序钩子。异步操作可能表示与当前正在执行的处理程序关联的异步控制流的延续。如果属于这种情况,则可以自定义 asio_handler_is_continuation 钩子以返回 true,并且 Asio 的实现可以使用此知识来优化新处理程序的调度。为了涵盖常见情况,Asio 为 strand,spawn() 和组合异步操作自定义了该钩子。
    • 添加了四个新的通用协议类,generic::datagram_protocolgeneric::raw_protocolgeneric::seq_packet_protocolgeneric::stream_protocol,它们实现了 Protocol 类型要求,但允许用户在运行时指定地址族(例如 AF_INET)和协议类型(例如 IPPROTO_TCP)。
    • 添加了 C++11 移动构造函数,允许将套接字(或接受器)转换为更通用的类型。例如,可以通过移动构造将 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 证书和密钥数据的功能。向 ssl::context 类添加了新函数,add_certificate_authority(), use_certificate(), use_certificate_chain(), use_private_key(), use_rsa_private_key()use_tmp_dh()
      • ssl::context 更改为默认自动禁用 SSL 压缩。要启用,请使用新的 ssl::context::clear_options() 函数,如 my_context.clear_options(ssl::context::no_compression) 中所示。
    • 修复了 signal_set 实现中的潜在死锁。
    • 修复了文档中接受器示例中的错误 #8421
    • 修复了可等待计时器文档中的复制粘贴错误 #8602
    • 添加了断言以满足某些代码分析工具 #7739
    • 修复了格式错误的 #warning 指令 #7939
    • 修复了 Linux epoll 实现中的潜在数据竞争。
    • 修复了一个 Windows 特有的错误,其中某些操作可能会生成具有无效(即 NULLerror_categoryerror_code #8613
    • 修复了 basic_waitable_timer 的底层实现,使其可以处理任何 time_point 值,而不会使中间持续时间对象溢出。
    • 修复了当在同一个 io_service 对象上并发调用 run()poll() 时可能发生的线程唤醒丢失问题 #8354
    • 修复了异步连接操作的实现,使其能够处理来自反应器的虚假就绪通知 #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。
  • 循环缓冲区:
    • 修复了警告 (#8032)。
  • 容器:
    • 添加了实验性的 static_vector 类,该类基于 Andrew Hundt 和 Adam Wulkiewicz 的高性能 varray 类。
    • 改进了 vector 构造函数/复制/移动/交换的速度,在可能的情况下分派到 memcpy。
    • 支持 BOOST_NO_EXCEPTIONS #7227
    • 修复了错误 #7921, #7969, #8118, #8294, #8553
  • 上下文:
    • 添加了对 SPARC 架构的支持。
  • 协程:
    • 添加了对分段堆栈(堆栈按需增长)的支持。
    • #7805 拼写错误
    • #7972 GCC 警告
    • #7988 C++11 范围 for
    • #8023 使用迭代器 traits
    • #8024 创建 const_iterator
    • #8101 迭代器的后缀运算符 ++
    • #8526 内存泄漏
    • #8544 调用托管 DLL
  • 几何:
    • 附加功能
      • 添加了由 Adam Wulkiewicz 为 Boost.Geometry 开发的空间索引。该空间索引最初由 Federico J. Fernandez 在 2008 年的 Google Summer of Code 项目期间启动,由 Hartmut Kaiser 指导。
      • 添加了 SVG 输出,这已经在扩展中存在了好几年
    • 文档
      • 修复了丢失的单词的小问题
    • Bug 修复
      • 共线的相反线段有时(在圆中)会出现鲁棒性问题,已修复
      • 修复了插入错误交点的问题(由缓冲区发现)
      • 应用了 Vladimir Petrovic 用于调试遍历的补丁
    • 解决的工单
      • 7462 float 的退化联合结果,已修复
      • 7465 scale_transformer 类中错误的构造函数访问类型,已修复
      • 7802 cart_intersect.hpp 未使用的参数警告,已修复
      • 8254 错误的交点,已修复
      • 8393 多边形模型不符合声明的多边形概念规则,文档已更新。
      • 8403 消除了编译器警告 C4127:条件表达式是常量
      • 8405 消除了编译器警告 C4189:'...' : 局部变量已初始化但未被引用
    • 内部更改
      • 使多个算法具有变体感知能力(追加、面积、清除、转换、相等、长度、点数)
  • :
    • 从 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 的最大邻接搜索。
    • 为资源受限的最短路径 (r_c_shortest_paths) 算法添加了来自 Brammert Ottens 的超时支持。
    • 对文档和示例进行了各种修复,并删除了过时的编译器解决方法。
  • 进程间:
    • 为映射区域添加了对特定于平台的标志的支持(工单 #8030)
    • 修复了错误 #7484, #7598, #7682, #7923, #7924, #7928, #7936, #8521, #8595
    • ABI 破坏性更改:更改了 Windows 中的启动时间戳函数,以使用 EventLog 服务启动时间作为系统启动时间。以前使用的来自 WMI 的 LastBootupTime 在时间同步和休眠方面不稳定,并且在实践中不可用。如果您真的需要获得 Boost 1.54 之前的行为,请从命令行或 detail/workaround.hpp 中定义 BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME
  • 侵入式:
    • 添加了 BOOST_NO_EXCEPTIONS 支持(bug #7849)。
  • Iostreams:
    • tee 现在可以正确地用于 std::streams (#8315)。
    • 文档修复 (#8385, #8460)。
    • 避免 Clang 的 -Wimplicit-fallthrough 的警告 (#8482)。
  • 词法转换:
    • 转换为字符指针现在会触发编译时断言而不是运行时断言 #8334
    • 词法转换现在能够转换 boost::int128_typeboost::uint128_type #7909
    • 更改了内部流缓冲区处理,现在可以使用 libc++ #8267, #7704
    • 恢复了获取 1.53.0 中损坏的 lexical_cast 函数的地址 #7421
    • 修复了警告、内部和测试 #2558, #7949, #8162, #8369, #8547
  • 数学:
    • 进行了重大重组,以合并其他 Boost.Math,如整数实用程序(最大公约数和最小公倍数)、四元数和八元数。创建新的章节标题。
    • 添加了许多对 Boost.Multiprecision 和 cpp_dec_float_50 作为用户定义类型 (UDT) 示例的引用。
    • 将 Clang 添加到支持的编译器列表中。
    • 修复了常量,使其在以任意精度使用时使用计算值的线程安全缓存。
    • 添加了查找贝塞尔函数零点的功能:cyl_bessel_j_zero, cyl_neumann_zero, airy_ai_zerosairy_bi_zeros(由 Christopher Kormanyos 提供)。
    • Rocco Romeo 对贝塞尔 J 和 Y 函数进行了更多精度改进。
    • 修复了导致某些头文件无法编译的令人讨厌的循环依赖性错误 #7999
    • 修复了 __tgamma 中的错误,该错误会导致 142.5 到 143 之间的参数出现虚假溢出。
    • 修复了 raise_rounding_error 中的错误,该错误导致在关闭抛出异常时返回不正确的结果 #7905
    • 添加了最小的 __float128 支持。
    • 修复了泊松分位数边缘情况下的错误 #8308
    • 调整了 Halley 迭代中使用的启发式方法,以处理在导数平坦化的棘手区域中反转不完全 beta 的情况。例如,计算小于机器 epsilon 的概率的 Fisher F 分位数。请参阅工单 #8314
  • 元状态机:
    • Bug 修复:favor_compile_time 策略的退出点已损坏。
    • Bug 修复:复制会中断子子机的退出点。
    • Bug 修复: #8046
  • 移动:
  • 多精度:
    • 破坏性更改rational_adapter 重命名为 rational_adaptor
    • 添加了对 MPFI 的支持。
    • 添加了 logged_adaptor。
    • 通过 GCC 的 __float128 或 Intel 的 _Quad 数据类型添加了对 128 位浮点数的支持。
    • 在 cpp_int 中添加了对用户定义文字的支持,改进了 constexpr 支持。
    • 修复了 cpp_int 整数除法中的错误,该错误导致当两个参数都足够小以适合 double_limb_type 时,cpp_int 的符号不正确。请参阅 8126
    • 修复了 cpp_int 中单个 limb 的减法中的错误,该错误导致当结果在最后一个 limb 中应为 0 时,值不正确:8133
    • 修复了 cpp_int 中的错误,其中 0 除以某物不会在结果中得到零:8160
    • 修复了一些超越函数中的错误,这些错误导致在重用变量时返回不正确的值,例如 a = pow(a, b)。请参阅 8326
  • 多边形:
    • Voronoi 文档的更新和修复。
    • 从 Trac 修复的 Bug:#8026, #8197, #8257
  • PropertyMap:
    • 添加了来自 Guillaume Pinot 的 compose_property_map
  • 范围:
    • Bug 修复
      • #6944 一些范围概念使用不正确的迭代器概念
      • #7407 istream_range 无法使用 wcin 编译
      • #7408 istream_range 不应拉取 istream
      • #7731 当 step_size 为 3 或更大时,irange 不会正确结束迭代
      • #7827 [range] 无法将 r | indexed 编译为范围算法
      • #8338 迭代器范围不适用于指向数组的指针作为迭代器
      • #8453 不正确的配置宏 BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION
  • 信号:
    • 不再积极维护,因此已弃用。对于新的开发,请使用 Signals2
  • 线程:
    • 新功能
      • #7285 C++11 合规性:允许为 call_once 传递可移动参数。
      • #7445 异步:添加 future<>.then
      • #7449 同步:添加同步值类
    • 修复的 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: 警告:解引用类型双关指针将破坏严格别名规则 [-Wstrict-aliasing]
      • #6843 [Intel C++] 包含 '#include <atomic>' 时出现编译错误
      • #6966 future boost::future_category dll 链接不一致
      • #7720 密集锁定/解锁互斥锁时出现异常 lock_error
      • #7755 线程:在 Windows 上使用 shared_mutex 时死锁
      • #7980 构建错误:msvc-11.0 和 BOOST_THREAD_DONT_USE_DATETIME
      • #7982 AIX 上 pthread_delay_np() 参数编译错误
      • #8027 thread 库无法使用 Visual Studio 2003 编译
      • #8070 优先使用 GetTickCount64 而不是 GetTickCount
      • #8136 boost::this_thread::sleep_for() 在 Windows 上休眠的时间比预期长
      • #8212 Boost 线程在 Solaris 10 上编译错误
      • #8237 修复 'thread_group' 的文档
      • #8239 barrier::wait() 未标记为 interruption_point
      • #8323 由于 Boost.Thread 和 Boost.Chrono 中的问题组合,boost::thread::try_join_for/try_join_until 可能会无限期阻塞
      • #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 存储函数对象的引用,而不是副本。
  • 类型特性:
    • 实现了新的类型特性 #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 特性系统,并更好地处理表达式类型
    • #6010 修复了 assignment.hpp 中的链接问题
    • 更新的文档
  • 无序容器:
    • 一些非常基本的 noexcept 支持。
  • 实用工具:
    • 修复 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:
  • 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 管理了此版本。