使用Boost和C++14编译器

3
当我使用-std=c++11标志编译支持C++11的代码并使用非仅头文件的Boost库时,需要使用-std=c++11编译Boost。这是因为当启用C++11时,Boost在头文件中具有一些接口差异,并且某些函数签名对于不同的C++标准是不同的。
我的问题是,在使用C++14(使用`-std=c++1y`标志)时是否也是如此,或者使用针对C++11编译的Boost库来编译C++14程序是否安全?

1
在C++14标准最终确定之前,没有任何东西是安全的。目前为止,这个标准还没有确定下来。由于它的范围主要限于对C++11的修复,我想你可以使用"-std=c++11"来解决问题。 - Bathsheba
我认为C++14不会与C++11完全兼容,因为至少有一种情况,在这两个标准中目前处理方式不同(当然,C++14还没有发布,所以关于它的一切都是假设)。 - user2485710
1个回答

4
这是一个非常广泛的问题,很难明确回答,因为:
  • Boost 是一组库的联盟,其中许多库已经有十多年历史
  • 在理论上,有很多可以进行向后兼容性处理的操作,有些可以被编译器检测到,有些只能通过单元测试检测
  • 许多 Boost 库实际上是 C++98 实现的 C++11/14 特性(包括库和编译器功能),所以不需要在 C++11/14 项目中使用它们。
  • Boost 本身正在激烈地辩论库应该以何种速度更新到 C++11/14,是否应该编写完全利用 C++11/14 的 V2 版本的库,甚至是否应该提供向后兼容的新 C++11/14 库。

您可能需要仔细阅读编译器错误(如果有的话),然后将其与下面列出的破坏性更改列表进行比较。此外,我建议您关注 Boost 测试工具,以查找适用于您系统的可疑编译器/库组合。

这里有一些相关的 Q&A:

  1. C++11 有哪些破坏性变化?
  2. 在 C++14 中引入的哪些更改可能会使 C++11 编写的程序出现问题?
  3. 相关的 Boost 特性与 C++11
  4. Boost 如何使用 C++11?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接