c++ - for循环的效率

标签 c++ performance for-loop

我需要堆栈溢出的意见来解决我脑海中关于循环效率的问题。现在,当我开始编程时,“让它工作”是重中之重,我的大部分 for 循环看起来像这样。

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

然后我很艰难,尤其是在 C++ 开发中,预递增可以为您节省一些调用,并且考虑到这将是 N 次调用并且它不会改变我养成的可读性习惯。

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

这在一段时间内已经足够好了,但关注的是可读性,在阅读了 Steve McConnell 的一些 Code Complete 之后,我得出了这个结论。

for (int loop_index = 0; loop_index < loop_count; ++loop_index) {;}

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

int i = 42;

int i(42); 

是前者调用构造函数和赋值运算符,而后者只调用构造函数。所以我在编码时把它纳入了我的日常工作。所以我的问题是,这是编写 for 循环的最有效和可读的方式吗:

for (int loop_index(0); loop_index < loop_counter; ++loop_index) {;}

最佳答案

其实,

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

很好。 i 是一个 int,因此编译器无论如何都会优化后增量。使用 int i(42);int i = 42; 初始化 int 也是一个品味问题。

我还会调用迭代器 i,而不是 loop_index。前者广为人知,后者则陌生。

但是,如果您处理的是迭代器,情况就会发生变化。很有可能 it++ 仍会针对 ++it 进行优化,但在这里,我宁愿使用预增量。

关于c++ - for循环的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865628/

相关文章:

c++ - OpenMP 条件并行化 - 并行部分中 if 子句的语法

c++ - 延长临时工生命周期的理由是什么?

c - MPLABx 这个错误是什么意思?

c - 对于循环来说这意味着什么?

c# - 我有一个 c++ 代码需要翻译成 c#,几乎完成(我认为)但需要 P/Invoke 的帮助才能使用非托管 dll

c++ - 将 "int"作为参数传递给宏

javascript - 为什么它显示延迟为异步和异步为延迟?正确理解 "dom parsed event"!但有没有?

javascript - 将数组中的项目列表映射到函数参数

r - 我如何有效地二分法

r - 使用 purrr::map 抓取多篇文章,而不是 R 中的 for 循环