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á 的编译时有理算术。

更新的库

  • 累加器:
    • 新的统计累加器:sum_kahansum_of_weights_kahansum_of_variates_kahan
  • Asio:
  • Config:
  • Dynamic Bitset:
  • Foreach:
    • 在支持的编译器上使用右值引用进行常量右值检测。
  • Function:
  • Function Types:
  • Graph:
    • 错误修复。
    • 删除已弃用的函数 kolmogorov_max_flow,请改用 boykov_kolmogorov_max_flow
    • 删除 <boost/graph/detail/is_same.hpp> 头文件,因为它的功能在 Boost.Type_Traits 中。
  • Iostreams:
    • 支持文件系统 v3 路径 (#4485)。
    • 修复了 chain 中的内存泄漏 (#4922)。
  • Iterator:
  • Lexical cast:
  • Logic:
  • Math:
    • 将 changesign 函数添加到 sign.hpp 中,以方便添加非有限方面。
    • 添加了来自 Johan Rade 的非有限方面,并带有测试、C99 格式的无穷大和 NaN 的使用示例以及文档。
    • 添加了来自 Johan Rade 的 changesign 的测试和文档。
  • Meta State Machine:
    • 在后端添加了一个 stop() 方法。
    • 添加了对eUML 中的 Boost.Phoenix 仿函数的部分支持。
    • 添加了选择状态切换发生的时间的可能性。
    • 错误修复
      • 关于未使用变量的 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_order_engineshuffle_output 可能会导致整数溢出。这些情况未被任何预定义的引擎触发。
      • 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 的行为从一开始就是不正确的。
  • 范围:
    • 修复了步长大于 1 时 irange 的结束位置 (#5544)。
  • Spirit:
  • Tokenizer:
    • 修复了错误 #4649
  • Utility:
    • 错误修复:#4432
  • Uuid:
  • Wave:

构建系统

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

更新的工具

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

测试的编译器

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
    • 带有 STLport 的 Visual C++:9.0
    • 带有 STLport 的 Visual C++,Windows Mobile 5: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

致谢

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