变量声明位置的编译器优化
Compiler optimization for variable declaration location
我从C++常见问题中读到"当地人应该在第一次使用附近声明"。此外,斯科特·迈耶(Scott Meyer)的有效C++第26项也出于性能原因提出了建议。但是我最近碰巧从某人那里听到,编译器足够聪明,可以在定义变量的地方优化变量,而不管它们在函数中实际使用的范围如何。为了便于理解,他建议在函数的顶部声明变量(不过我不买这个理由)。他在编译器优化方面是否正确?
(问题是关于性能和编译器优化。不是代码可读性)。
编译器与它无关。 有两个一般规则关于定义变量(局部或其他):保持范围和可见性尽可能小,如果可能,初始化定义。 这些规则适用于人类读者,而不是编译器。两者都导致"宣布当地人接近他们的第一次使用",作为一个推论。
是的,他们足够聪明。
但也有一个软件技术答案:你应该这样做,因为它是一种更好的编程风格。
将变量声明放在使用变量的位置附近会增加局部性,并且可以使代码和程序流更易于理解。此外,如果将变量放置在嵌套作用域中,则在离开声明它的作用域时,它将被"销毁",从而有助于解决诸如RAII之类的事情。
你应该始终努力编写一个易于阅读和理解的源代码。
即使编译器能够对此进行优化,仍然这样做是一种很好的做法。它为您提供了改进的可读性,您无需缓存并记住变量在块开始时初始化为的值。
相关文章:
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- VS2017调试器:没有地址,可能是由于编译器优化
- 何时允许编译器优化复制构造函数
- 如何使用 GCC 编译器优化创建静态库?
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 是否允许编译器优化掉局部易失性变量
- 删除编译器优化并在发布中启用 pdb 文件
- 静态 constexpr 的编译器优化
- 如何让MSVC编译器优化多步POD初始化?
- 按位不操作的编译器优化
- 模板专用化与编译器优化
- 编译器优化:G 比英特尔慢
- 运算符重载关联性编译器优化
- Intel OpenCL编译器:优化结构使用情况
- C 中编译器优化的影响
- 视觉C++ 2017 错误?编译器优化表达式
- 虚拟功能编译器优化C
- 未定义的行为确实有助于现代编译器优化生成的代码