gpt4 book ai didi

c++ - `auto` 说明符的编译时间是否较慢?

转载 作者:可可西里 更新时间:2023-11-01 14:54:08 26 4
gpt4 key购买 nike

从 C++11 开始,我们可以使用 auto a = 1+2 而不是 int a = 1+2 并且编译器推断出 a 的类型 本身。它是如何工作的?在编译时(更多操作)是否比自己声明类型慢?

最佳答案

auto要求 C++11 编译器 生成一些有限 type inference (查看 Ocaml 如果你想要一些更性感的类型推理语言)。但是开销只是编译时的。

如果你替换auto a=1+2;int a=1+2; (两者具有相同的含义,请参阅 answer by simplicis )并且如果您要求编译器 optimize (甚至可能不要求优化)你可能会得到相同的 machine code .另见 this .

如果使用 GCC尝试编译一个小的 C++11 foo.cc文件 g++ -Wall -fverbose-asm -O -S foo.cc并查看(使用编辑器)生成的 foo.s汇编程序文件。您将看不到生成的代码有什么不同(但汇编程序文件可能会略有变化,例如,由于调试信息等元数据)

如果您担心较慢的编译时间,我想使用auto不是决定性因素(可能,重载在编译时间上的成本更高)。 C++11 几乎被设计成实际上需要很多optimizations (特别是复杂的内联和常量折叠和死代码消除),它的“解析”(特别是头文件包含和模板扩展)是昂贵的。

Precompiling headers并与 make -j 并行构建(也许 ccache distcc )可能有助于改善整体编译时间,远比避免 auto 更有效.

如果您想系统地避免 auto (特别是在 range-for 循环中,如 std::map<std::string,int> dict; for (auto it: dict) { ... } )你最终会输入更多的源代码(其解析和检查需要大量时间),并且有更多的错误风险。正如解释的那样 here ,您可能会稍微猜错类型,并且(稍微错误地)明确它可能会因为额外的转换而减慢代码的执行速度。

如果使用 GCC你可能会通过 -ftime-report g++并获取有关各种 GCC 遍和阶段的时间测量值。

关于c++ - `auto` 说明符的编译时间是否较慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32519082/

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