Boost C++ 库

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

版本 1.47.0

版本 1.47.0

2011 年 7 月 11 日 22:19 GMT

文档

下载
平台文件
unixboost_1_47_0.tar.bz2
boost_1_47_0.tar.gz
windowsboost_1_47_0.7z
boost_1_47_0.zip

新库

  • Chrono: 有用的时间工具,来自 Vicente J. Botet Escribá。
  • Geometry: 几何库,来自 Barend Gehrels、Bruno Lalande 和 Mateusz Loskot。
  • Phoenix: 在实际调用点定义小型匿名函数对象,以及更多功能,来自 Joel de Guzman、Dan Marsden 和 Thomas Heller。
  • Ratio: 编译时有理算术,来自 Vicente J. Botet Escribá。

更新的库

  • Accumulators:
    • 新的统计累加器:sum_kahansum_of_weights_kahansum_of_variates_kahan
  • Asio:
  • Config:
  • Dynamic Bitset:
  • Foreach:
    • 在支持的编译器上使用右值引用进行 const 右值检测。
  • Function:
  • Function Types:
  • Graph:
    • 错误修复。
    • 删除已弃用的函数 kolmogorov_max_flow,请改用 boykov_kolmogorov_max_flow
    • 删除了 <boost/graph/detail/is_same.hpp> 头文件,因为其功能已在 Boost.Type_Traits 中。
  • Iostreams:
    • 支持 filesystem v3 路径 (#4485)。
    • 修复了 chain 中的内存泄漏 (#4922)。
  • Iterator:
  • Lexical cast:
  • Logic:
  • Math:
    • 在 sign.hpp 中添加了 changesign 函数,以方便添加非有限方面。
    • 从 Johan Rade 添加了非有限方面,包括 C99 格式的无穷大和 NaN 的测试、使用示例和文档。
    • 从 Johan Rade 添加了 changesign 的测试和文档。
  • Meta State Machine:
    • 在后端添加了 stop() 方法。
    • 添加了对 eUML 中的 Boost.Phoenix 函子的部分支持。
    • 添加了 选择状态切换发生时间的可能性。
    • Bugfixes
      • gcc 警告关于未使用的变量。
      • 更好地实现了 favor_compile_time 后端策略。
      • eUML 和状态构造的错误。
      • 不正确的 eUML 事件和状态宏。
      • 传递给直接进入状态的 on_entry 操作的不正确事件类型。
      • 更多示例。
  • MultiIndex:
    • 修复了与 Boost.Ref 相关的 composite_key_compare 中的 ADL 问题。
    • 维护修复。
  • Proto:
    • 预处理以获得更好的编译时间。
    • 默认预处理器限制提高
      • 最大表达式元数 (BOOST_PROTO_MAX_ARITY) 从 5 增加到 10。
      • 最大函数调用元数 (BOOST_PROTO_MAX_FUNCTION_CALL_ARITY) 从 5 增加到 10。
      • 最大逻辑运算符元数 (BOOST_PROTO_MAX_LOGICAL_ARITY) 从 8 增加到 10。
    • 更好地集成了 proto::basic_expr,以避免意外地不必要地实例化 proto::expr
  • Random:
    • 与新标准同步。
      • 添加了许多新的分布:chi_squared_distributionnegative_binomial_distributionfisher_f_distributionstudent_t_distributionweibull_distributionextreme_value_distributiondiscrete_distributionpiecewise_constant_distributionpiecewise_liear_distribution
      • uniform_intuniform_real 重命名为 uniform_int_distributionuniform_real_distribution
      • 为所有分布添加了成员:param_typeparam、流运算符、比较运算符、minmax
      • 允许分布直接与生成器一起使用,而无需使用 variate_generator
      • 更改了 geometric_distributionlognormal_distribution 参数的含义。
      • gamma_distribution 添加了第二个参数。
      • 添加了 seed_seq,并为生成器添加了相应的构造函数和 seed 重载。
      • 添加了 generate_canonical
      • 重命名了引擎模板。例如,mersenne_twister 变为 mersenne_twister_engine
      • 新的引擎适配器 independent_bits_engine
      • 添加了新的预定义引擎 typedef:mt19937_64ranlux[24|48][_base]knuth_b
      • 更新了播种算法。
      • 添加了 discard
      • 在所有预定义引擎中使用无符号类型而不是有符号类型。
    • 错误修复
      • linear_congruential_engine 可能会断言,因为模块化算术并非在所有情况下都实现。shuffle_output(现在称为 shuffle_order_engine)可能会导致整数溢出。这些情况未被任何预定义引擎触发。
      • uniform_small_int 现在实际上按照文档中的说明运行。
    • 用于 binomial_distributionpoisson_distribution 的新的高效算法。
    • 将所有功能移至 namespace boost::random
    • 向后兼容性问题
      • 播种算法已更改。为了与标准兼容,这是不可避免的。更不用说一些现有的算法很奇怪且不一致。
        • 使用整数播种:对于大多数生成器,行为应该保持不变,除了 lagged_fibonaccisubtract_with_carry(以及因此 ranlux)。
        • 使用另一个生成器播种生成器:这已通过使所有生成器成为 SeedSeq 的模型来实现。因此,如果您使用非 Boost.Random 生成器播种 Boost.Random 生成器,您的代码将不再编译。算法已更改,因此使用此播种方法的代码将产生不同的值。
        • 从迭代器对播种生成器:这在某些地方隐式地假设元素是 32 位整数,但并非所有地方都是如此。我已在所有地方添加了此要求,并相应地更新了算法。value_type 不超过 32 位的生成器的行为应保持不变。
      • 重命名
        • 每当类被重命名时,都会有一个带有旧名称的包装器。命名空间 boost 中还为所有移动的内容使用了 using 声明。
        • 分布中一些访问器的名称已更改。旧名称和新名称都允许使用。
      • geometric_distributionlognormal_distribution:运行时行为不同。boost::geometric_distributionboost::lognormal_distribution 提供旧行为,boost::random::geometric_distributionboost::random::lognormal_distribution 提供新行为。
      • 流式传输:gamma_distribution 有一个新的参数,因此使用旧版本保存的文本将无法被新版本读取。
      • variate_generator 现在是一个简单的直通包装器。假设它会调整生成器的结果类型以匹配分布的代码将不再起作用。这对于 Boost.Random 提供的任何分布都不是问题。
      • 返回类型:某些生成器的 result_types 略有更改。一些有符号类型已更改为无符号类型以匹配标准。
      • has_fixed_range:现在始终为 false,因为它似乎不是很有用并且过于繁琐。任何在没有首先检查 has_fixed_range 的情况下访问 const_minconst_max 的代码从一开始就是不正确的。
  • Range:
    • 修复了步长大于 1 时 irange 的结束位置 (#5544)。
  • Spirit:
    • Spirit V2.5,有关详细信息,请参阅“新增功能”部分。
  • Tokenizer:
    • 修复了错误 #4649
  • Utility:
    • 错误修复:#4432
  • Uuid:
  • Wave:
    • Wave V2.3.0,有关详细信息,请参阅 Changelog

Build System

  • Boost.Build 可执行文件的官方名称已更改为 b2。引导脚本创建了一个旧名称 bjam 的副本,以防止第三方构建脚本失败。

Updated Tools

  • BoostBook:
    • 处理 doxygen 标签:\seetparamref(仅适用于类)。
    • 支持类和函数的注释。
  • Quickbook:
    • 为标题生成一致的 ID。
    • 改进了 windows 的 unicode 支持。
    • 警告 windows 路径,因为它们不可移植。
    • 撤销了 [br] 的弃用。
    • 支持版权属性中的日期范围和逗号分隔的子句。
    • 改进了简单标记(例如 *bold*)的分隔符检查。
    • 代码片段中的直通注释。
    • __FILENAME__ 宏现在生成相对路径。
    • 允许在语法突出显示代码的注释中使用 quickbook 转义符。

Compilers Tested

Boost 的主要测试编译器是

  • Linux
    • LLVM Clang 2.8
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.1, 4.4.3, 4.4.5, 4.5.1, 4.5.2, 4.6.0, 4.6.1
    • GCC, C++0x 模式: 4.3.4, 4.4.3, 4.5.2
    • Intel 12.0
  • OS X
    • Apple Clang 2.1
    • Intel 11.1
    • GCC: 4.2.1, 4.4.4
    • GCC, C++0x 模式: 4.4.4
  • Windows
    • Visual C++ 7.1, 9.0, 10.0
    • GCC, mingw: 4.4.0
  • FreeBSD
    • GCC 4.2.1, 64 位
  • QNX
    • QCC

Boost 的其他测试编译器包括

  • Linux
    • 来自 subversion 的 Clang,带有 GNU libstdc++。
    • LLVM Clang 2.8
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.3, 4.4.5, 4.5.1, 4.5.2, 4.6.0, 4.6.1
    • GCC, C++0x 模式: 4.3.4, 4.4.3, 4.5.2
    • pgCC: 11.2
    • Intel: 10.1, 11.0, 11.1, 12.0
    • PathScale: 3.2
  • OS X
    • 来自 subversion 的 Clang,带有 GNU libstdc++。
    • Intel 11.1
    • GCC: 4.4.4
    • GCC, C++0x 模式: 4.4.4
  • Windows
    • Visual C++ 7.1, 9.0, 10.0
    • Visual C++ with STLport: 9.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
    • GCC, mingw: 4.5.2
    • GCC, C++0x 模式, mingw: 4.5.2
  • AIX
    • IBM XL C/C++ Enterprise Edition, V11.1.0.0

Acknowledgements

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