【问题标题】:Will code written using the C++98 standard compile with new compilers? [duplicate]使用 C++98 标准编写的代码是否可以使用新的编译器进行编译? [复制]
【发布时间】:2013-02-06 23:31:53
【问题描述】:

在 C++98 标准下编写的代码能否与较新的编译器一起使用,例如 g++。或者它不会工作。假设简单的“Hello World”程序可以工作,但是复杂的命令行程序呢?

【问题讨论】:

  • 请阅读 C++03 和 C++11 标准末尾的不兼容列表以获取详尽列表。
  • 标准委员会对于破坏与现有代码的兼容性非常保守,所以这应该不是主要问题。
  • 一般,没有。例如:int main() { auto int x = 0; } 在 C++11 之前是有效的,因为 auto 充当存储类说明符,但由于没有人实际使用它,因此已将其删除。 (并且 auto 关键字已被重新用于进行类型推断。)如果您的代码确实确​​实使用了它,它会中断。
  • 简短的回答是旧代码几乎适用于所有情况。如果你足够努力,你可以发明一些会破坏的东西,但即使你在尝试,也不是很容易想出很多,而且你做的少数不太可能在真正的代码中发生。
  • 我经常听到的一句话是,大多数破坏性更改都具有“应该被破坏”的味道。所以即使它确实坏了,修复它也会让你的代码更好:-)

标签: c++ c++98


【解决方案1】:

g++-std= 命令行参数允许您针对特定版本的标准进行编译。

见:http://linux.die.net/man/1/g++

如果将来 g++(这适用于我认为的任何编译器)的作者决定默认使用不兼容的标准版本,则此参数将允许您编译旧代码。

只有当 g++ 的作者完全放弃 C++98 支持时,它才会停止工作。只有当 C++98 代码的数量变得如此之少或新标准与它如此不兼容时,我才会看到这种情况发生,以至于让人们更新他们的所有代码比继续支持它更容易。无论如何,这应该是一个渐进的、可预见的变化。

【讨论】:

  • 好的,谢谢,但这并不能回答问题。这比任何东西都更具理论性。
  • 注意:我在回答 C++98 是否可以用较新的编译器编译的问题,而不是 C++98 与较新标准的兼容性问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 2014-01-16
  • 1970-01-01
相关资源
最近更新 更多