为什么要将语言标准从-std = gnu ++ 98提升到-std = gnu ++ 11

时间:2018-02-22 20:58:42

标签: c++ c++11 gcc compiler-optimization c++98

我有一个使用-std = gnu ++ 98的相对维护良好的代码库。将语言标准从gnu ++ 98升级到gnu ++ 11有什么好处?

如果有优点,只需从-std = gnu ++ 98更改为-std = gnu ++ 11即可吗?是否还有其他选项应该与此更改一起考虑(考虑-std = c89或-ansi如何为-c配置-stantic -pedantic-errors)

2 个答案:

答案 0 :(得分:2)

(我会尝试提供一个广泛的答案.YMMV取决于你没有提供的细节。)

对于现有的代码库?不多。为C ++ 11及更高版本编写的代码可以利用许多新的语法和语义并提高性能(例如使用constexpr函数,移动语义等);在您的情况下,这可能是标准库,或您正在使用的其他库,它们支持更新的C ++语言标准。但如果性能关键代码是您自己的,我不建议推广标准版本。

话虽如此 - 如果您要使用C ++ 11(或更好的C ++ 14或C ++ 17)改进您的实际代码库,您将能够在性能方面受益,可读性,可维护性,减少代码大小等。这是绝对可取的,因为随着时间的推移,越来越多的代码需要C ++ 11或更高版本来编译。

答案 1 :(得分:1)

简短的回答是 - 这取决于。

这取决于

  1. 产品所有者的PoV项目的生命周期是什么。
  2. 团队中的技能
  3. 可维护性
  4. 项目模块化
  5. 单元测试&自动化测试覆盖率
  6. 风险(最后但最重要的)
  7. 就风险而言,量化每个风险项目的成本非常重要。 例如: 6.A中回归成本(如果你采取暴跌) 6.B.消耗成本(如果你不采取暴跌) 6.C.采取暴跌的成本(开发努力)

    无论是升级还是不升级都可以争论,你可以为每一方获得令人信服的理性。

    我的观点:如果项目设计合理(模块化为一体),经过单元测试并且维护良好,我会在试用项目的一个小但关键的模块之后再做一顿饭并重新审视我的决定。

    如果项目没有经过精心设计或单元测试,我会使用升级路线作为支付技术债务的机会。