3

当我使用 C++11 支持(使用-std=c++11标志)编译我的代码并使用非仅标头 Boost 库时,我需要使用-std=c++11. 这是因为 Boost 在启用 C++11 时在头文件中存在一些接口差异,并且对于不同的 C++ 标准,一些函数签名也不同。

我的问题是 C++14 是否也是如此(使用 g++ 4.9,带有 `-std=c++1y 标志),或者使用 C++11 编译的 Boost 用于使用 C 编译的程序是否安全++14?

4

1 回答 1

4

这是一个非常广泛的问题,很难明确回答,因为

  • Boost 是一个图书馆联盟,其中许多图书馆已有十多年的历史
  • 原则上可能会发生很多向后兼容性,有些由编译器检测到,有些仅由单元测试
  • 许多 Boost 库实际上是 C++11/14 功能(库和编译器功能)的 C++98 实现,因此您不需要在 C++11/14 项目中使用它。
  • Boost 本身非常争论库应该以何种速度更新到 C++11/14,是否应该编写完全利用 C++11/14 的库的 V2 版本,甚至是否应该编写新的 C++11 /14 库应提供向后 C++98 兼容性

您可能需要仔细阅读编译器错误(如果有)并将它们与下面列出的重大更改列表进行比较。此外,我建议遵循Boost 测试工具来查找适用于您的系统的可疑编译器/库组合。

一些相关的问答在这里:

  1. C++11 中引入了哪些重大变化?
  2. C++14 中引入的哪些更改可能会破坏用 C++11 编写的程序?
  3. 相关的 boost 特性 vs C++11
  4. boost 使用 c++11 的效果如何?
于 2014-06-27T19:22:26.760 回答