【问题标题】:Why promote language standard from -std=gnu++98 to -std=gnu++11为什么将语言标准从 -std=gnu++98 提升到 -std=gnu++11
【发布时间】:2018-02-22 20:58:41
【问题描述】:

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

如果有优势,只需从 -std=gnu++98 更改为 -std=gnu++11 就足够了吗?是否有其他选项应该伴随此更改(考虑 -pendantic -pedantic-errors 如何伴随 -std=c89 或 C 的 -ansi)

【问题讨论】:

  • c++11 引入了移动语义和右值引用。这是一个巨大的变化。
  • 这是一个非常具体的问题,应该重新打开。
  • @NemanjaTrifunovic - 过于宽泛,重新表述问题:C++ 从 C++98 到 C++11 再到 C++17 发生了什么变化 - 你可以写一本书。
  • @CherryVanc:既过于宽泛(有大量优势,但并非所有优势都与每个项目相关)和基于意见(给定更改的重要性将很大程度上取决于意见)基于)。就个人而言,我发现 C++ 在编写 pre-C++11 之前是一个令人讨厌的过程,并且由于类型推导、函数式编程工具等方面的改进,在 C++11 之后好多更好,但是很难说给定的现有代码库会得到改进; STL 容器上的 r 值引用和移动语义可能会提高您的速度,但除此之外,它更容易编程,这就是诱惑。

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


【解决方案1】:

(我将尝试提供一个笼统的一般性答案。YMMV 取决于您尚未提供的具体细节。)

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

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

【讨论】:

    【解决方案2】:

    简短的回答是 - 视情况而定。

    这取决于

    1. 从产品所有者的 PoV 来看,项目的生命周期是多少。
    2. 团队中的技能组合
    3. 可维护性
    4. 项目模块化
    5. 单元测试和自动化测试覆盖率
    6. 风险(最后但最重要的)

    就风险而言,量化每个风险项的成本很重要。 例如: 6.a.回归成本(如果你冒险) 6.b。消耗成本(如果你不冒险) 6.c。冒险的成本(开发工作)

    升级或不升级都可以争论,你可以为每一方找到一个令人信服的理由。

    我的观点:如果项目设计良好(模块化)、单元测试且维护良好,我会在试行该项目的一个小而关键的模块后重新审视我的决定。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 2019-11-07
      相关资源
      最近更新 更多