10.4. 兼容性

假设找到一个很有前景的库并决定引入项目,它真的能用吗?能稳定工作吗?此时C++生态的碎片化问题就暴露无遗了。以下糟糕情况的发生概率都不为零:

  • 库使用的C++版本比您的项目更新,导致编译失败
  • 库使用的C++版本过旧
  • 因各种原因产生大量警告
  • 库虽能编译,但接口使用过时的语法结构
  • 库不支持项目目标平台
  • 库与编译器不兼容
  • 库与构建流程冲突
  • 库虽支持所有目标平台,但在特定平台存在行为差异、性能问题或bug

希望您永远不会遇到这些问题。值得一提的是,对比技术栈(Python/Java/.NET)中这些问题几乎不存在 —— 除非特殊情况,比如Python调用C++模块,或Java使用操作系统原生功能时可能遭遇平台差异。这些生态通常能保持高度一致性。

公平地说,成熟的C++框架(如Boost/zlib)同样致力于提供一致行为。只是在基于虚拟机的语言中,实现库的跨平台一致性要容易得多。

即使库能完美运行:没有警告、没有诡异问题、与代码工具链和谐共处,

最后还要问:我们能信任它吗?