循环中的预递增/递减与 gcc 和 Visual C 的后递增/递减 [重复]

Posted

技术标签:

【中文标题】循环中的预递增/递减与 gcc 和 Visual C 的后递增/递减 [重复]【英文标题】:Pre increment/decrement in a loop vs post increment/decrement with gcc and Visual C [duplicate] 【发布时间】:2017-07-05 14:25:05 【问题描述】:

我知道有很多关于使用前增量(减量)与使用后的性能提升的问题。而且据我推测,大部分 C/C++ 编译器都会改变

for (int i =0; i<N; i++)

...

以下作为优化

for (int i =0; i<N; ++i)

...

我最近做了很多代码审查,我发现很多我可以将 i++ 更改为 ++i 的实例。问题是只修复良好的形式,或者在某些情况下它可以对性能产生影响?

意思是我通常使用的编译器:gcc 和 Visual C++ 会自动进行这种优化吗?也欢迎提供有关其他常用编译的信息。

【问题讨论】:

我认为即使是编译器也会有一个更一致、更好看的风格。此外,只需使用不同的优化选项从您的源代码生成程序集,然后自己检查。没那么难。 ***.com/questions/24886/… 请注意,while (myTestVal &lt; x++) 的含义不同于 while (myTestVal &lt; ++x) ***.com/questions/1116735/… 好点我会解决我的问题 【参考方案1】:

对于像 intdouble 这样的内置类型,您不会看到任何性能差异。

对于自定义 C++ 类型,您可能会看到不同之处,具体取决于它们实现运算符的方式 - 唯一知道的方法是阅读代码并对其进行分析。

【讨论】:

以上是关于循环中的预递增/递减与 gcc 和 Visual C 的后递增/递减 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

i++与++i 递增递减运算符的前置与后置

什么会导致for循环在它应该递增时递减?

LeetCode210509非递减数列和最大连续递增数列

强制包含可以与 Visual C++ 中的预编译头一起使用吗?

java中的递增和递减运算符

为啥递增和递减是一元运算