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)
其实,
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,但在这里,我宁愿使用预增量.