for循环的效率

tom*_*udm 2 c++ performance for-loop

我需要堆栈溢出的意见来解决一直关注循环效率的问题.现在,当我开始编程时,"让它工作"是一个重中之重,我的大多数for循环都是这样的.

for (int i = 0; i < N; i++) {;}
Run Code Online (Sandbox Code Playgroud)

然后我就玩了,特别是在C++开发中,预增量可以节省一些调用,并且考虑到这将是N次调用,并且它不会改变我养成习惯的可读性.

for (int i = 0; i < N; ++i) {;}
Run Code Online (Sandbox Code Playgroud)

这已经足够好了一段时间,但专注于可读性,在阅读了Steve McConnell的一些Code Complete之后,我到了这里.

for (int loop_index = 0; loop_index < loop_count; ++loop_index) {;}
Run Code Online (Sandbox Code Playgroud)

这些变量会根据代码的上下文而改变.然后我读了一些关于内置类型构造函数和赋值的Effective C++.而且基本上就是那之间的区别

int i = 42;
Run Code Online (Sandbox Code Playgroud)

int i(42); 
Run Code Online (Sandbox Code Playgroud)

是前者调用构造函数和赋值运算符,而后者只调用构造函数.所以我在编码的过程中将其纳入了常规.所以我的问题是,这是编写for循环最有效和最易读的方法:

for (int loop_index(0); loop_index < loop_counter; ++loop_index) {;}
Run Code Online (Sandbox Code Playgroud)

bit*_*ask 5

其实,

for (int i = 0; i < N; i++) {;}
Run Code Online (Sandbox Code Playgroud)

很好.i是一个int,所以编译器无论如何都会优化后增量.无论你初始化intwith int i(42);还是with int i = 42;也是一个品味问题.

我也会调用迭代器i而不是loop_index.前者无处不在,而后者则很奇怪.

但是,如果您正在处理迭代器,则图片会发生变化.机会it++仍然会被优化++it,但在这里,我宁愿使用预增量.