【问题标题】:Does auto in C++ 11 make compile time longer? [duplicate]C++ 11 中的 auto 是否会使编译时间更长? [复制]
【发布时间】:2023-03-06 16:39:01
【问题描述】:
auto abc = 5566;

据我所知,编译器在编译时知道abcint,因此它不会影响运行时性能。

但是,它会使编译时间变长吗??

提前致谢。

【问题讨论】:

  • 可能需要多纳秒。
  • @rightfold 或不到一纳秒。
  • 硬件便宜,程序员不便宜。
  • 编写一个发出 1,000,000 个自动或类型变量的程序,#include 一次编译每个 30x,丢弃最好和最差的,平均结果,然后......你的答案?
  • @schepurin 我赞成,我建议一种测试方法,因为答案可能因编译器及其实现方式而异。不久前,我发现#include <string> 以这种方式在 gcc 构建中每 100 个编译单元增加 26 秒。

标签: c++ performance c++11


【解决方案1】:

autoint 长一个字符,所以词法分析器肯定需要做更多的工作。

另一方面,编译器不再需要检查用户是否提供了适当的类型,所以我最好的猜测是auto 会稍微快一些。

最后,您可能不应该基于性能考虑在类型推断和显式类型之间做出决定。意图和清晰度应该是决定因素。

【讨论】:

  • "autoint 长一个字符,所以词法分析器肯定需要做更多的工作。" - 我相信我们在这里有一个赢家。
  • 如果int 后面有十个空格,而auto 后面只有一个呢? :-) 不过,该死的好笑。
  • 如果我们担心词法分析器必须做的工作,那么在典型的“自动使用案例”中,类型类似于 std::vector<std::tuple<int,int>>::const_iterator 的情况是什么?
  • OTOH with auto,编译器仍然需要推断类型 - 需要时间 - 并且 然后 必须为其存储初始化程序。我会说auto 可能会稍微
  • @sehe 编译器已经知道初始化器的类型。否则,如果你弄错了变量的类型,它不会给你编译器错误。
【解决方案2】:

它可能会,也可能不会,这取决于编译器。当然,这不是标准强制要求的。

由于词法分析器无论如何都知道5566 的类型,因此它很可能在很大程度上无关紧要。

您最好不要担心算法和数据结构选择等更多“宏观”问题。与担心自动类型选择是否更快相比,您几乎肯定会获得更好的投资回报。

在创建变量时使用auto 与其说是为了提高性能,不如说是为了让您作为编码员的生活更轻松。

【讨论】:

    【解决方案3】:

    在编译时,编译器无论如何都必须检查类型,我认为用编译器找到的类型替换 auto 不会花费更多时间。

    如果您想了解更多信息:C++ 11 auto compile time or runtime?

    如果您想知道是否应该使用 auto:How much is too much with C++11 auto keyword?

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      相关资源
      最近更新 更多