经常听到的一个面试问题:在for循环中,i++与++i的区别?
可能一个常见的回答是i++将产生一个临时变量,返回值是该临时变量;++i不会产生这个临时变量,而是直接返回自增过后的值。
然而,通过gcc编译器编译过后,两者汇编代码完全一致。先给出如下示例代码:
//i_pre.cpp
#include "common.h"
int main(){
for(int i = 0; i < 10; ++i)
cout << "hello" << endl;
return 0;
}
//i_post.cpp
#include "common.h"
int main(){
for(int i = 0; i < 10; i++)
cout << "hello" << endl;
return 0;
}
gdb调试时,使用 disassemble命令查看汇编代码,++i结果如下:
而 i++结果如下:
以上结果使用默认优化等级,即O1,为了排除优化的影响,使用
g++ -g -O0 i_post i_post.cpp关闭默认优化,结果仍不改变。
所以,对于现在的gcc编译器(13.1),for循环中的自增顺序不影响结果。但是仍然建议使用 ++i, 因为低版本的gcc和msvc是否具有一致的表现还未测试过。