【问题标题】:C/CPP for loop performance: test expression [closed]循环性能的 C/CPP:测试表达式 [关闭]
【发布时间】:2022-01-24 23:04:48
【问题描述】:

通常,C/CPP for 循环中的简单测试表达式是使用比较编写的。
for ( i = 0; i < N; ++i)

但是,我们可以找到其他方法 - 使用 not_equal 运算符。 (例如 Bjarne Stroustrup 的“C++ 之旅”)

for ( i = 0; i != N; ++i)

对此有何看法?
是性能问题还是风格问题?

谢谢

【问题讨论】:

  • 这在性能上没有任何差异。只是口味问题更好(我们为什么其他人将其关闭为“基于意见”)。你是初学者:你必须学习很多,甚至在考虑这种变化是否对性能有任何影响(它不是)之前。现在只关注如何编写正确的程序。
  • 第二种是在循环中使用迭代器时的常用样式。作者可能想要一个一致的循环样式以便于扫描他们的代码。
  • 有些迭代器没有operator&lt;,但只支持==!=。总是使用!= 让你所有的for循环看起来都一样。但在 C 语言中不是。

标签: c++ c for-loop


【解决方案1】:

您可以查看here。没有区别,两者的汇编代码是相同的。

这是性能问题还是只是风格问题?

主要是风格。

【讨论】:

  • 这是一个有点问题的例子,因为上限是一个编译时间常数。此外,编译器可以根据类型推断可能的值,并且您从最小的可能值开始迭代。如果您将N 设为运行时变量并将类型更改为有符号变量(例如int)或从1 开始,您将看到the difference in the assembly
  • @Evg 是的。但大多数时候,for 循环是用无符号整数编写的。这就是我专注于未签名的原因。
  • 程序集中的JNEJL 之间应该完全有明显区别,但其余部分应该几乎相同。
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 2022-12-21
  • 2011-06-04
  • 2013-02-25
  • 2019-06-24
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多