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

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

最佳答案

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

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

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

    一些相关的问答在这里:
  • What breaking changes are introduced in C++11?
  • What changes introduced in C++14 can potentially break a program written in C++11?
  • Relevant boost features vs C++11
  • How well does boost use c++11?
  • 关于c++ - 在 C++14 编译器中使用 Boost,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23800450/

    10-11 22:06
    查看更多