gpt4 book ai didi

c++ - 是否可以用两种不同的语言标准编译一个项目?

转载 作者:行者123 更新时间:2023-12-01 14:24:50 35 4
gpt4 key购买 nike

我有一个严格用 C++14 编写的项目,我想在另一个 C++17 项目中使用它。一些 C++14 特性,如 Dynamic Exception Specification在 C++17 中被删除。
有没有办法一起使用和编译两个代码库?该项目大到足以使重构变得不切实际。

最佳答案

这将是特定于平台的:可以想象,根据命令行等指定的标准选择了完全不同的 header 。
也就是说,here是 Jonathan Wakely 的回答,它向您保证,如果您远离旧编译器中的不稳定功能,那么按照设计,使用 gcc 应该不会出现这样的问题。
根据乔纳森的说法,根本原因是 gcc 中的 C++ 标准实现,一旦声明为稳定,就不会使用选定的 C++ 标准更改它们的 ABI(即向外的类型定义,名称修改),甚至在编译器版本之间也不行。
因为翻译单元之间的所有交互都必须限制为最小的通用标准版本,所以没有问题:如果指定 C++17,C++11 特性不会改变。 C++17 TU 中的新功能不能用于与早期标准 TU 的通信,因为它们尚不可用,因此也没有问题。如果您能够重新编译,最安全的建议是:

  • 最好使用相同的 std::string 版本(可以在编译时从命令行控制)。
  • 使用相同的 libstdc++。
  • 使用相同的 gcc 版本(并通过命令行控制每个 TU 使用的语言标准)。

  • 其他编译器遵循类似的兼容性策略是有意义的。

    关于c++ - 是否可以用两种不同的语言标准编译一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63491270/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com