使用 i++ 或 ++i 编写循环
Writing loops with i++ or ++i
我有一个关于编写循环的问题。我总是从
(int i=0; i<10; i++)
但我看到许多专家从
(int i=0; i<10; ++i)
有什么真正的区别,还是它们是一样的?
当然,我知道前增量和后增量之间的区别。我的意思是编写循环时应该使用哪一个?或者这取决于。
谢谢!
两者之间没有区别。前递增和后递增是唯一的差异。
i++
和 ++i
之间的区别在于表达式的值。
i++
值是增量前的i
值。++i
的值是递增后的i
值。
但是在您的循环中,它没有任何区别。
int i = 0;
00000088 xor edx,edx
0000008a mov dword ptr [ebp-40h],edx
i++;
0000008d inc dword ptr [ebp-40h]
++i;
00000090 inc dword ptr [ebp-40h]
如您所见,它对性能没有任何影响,但在某些情况下,您可能希望在序列点之后或之前增加数字。
在 C++ ++i
中是 l 值,但i++
不是。
在C++中是有区别的。前缀运算符将返回对值的引用,而后缀运算符将返回副本,因此比前缀运算符慢。
递增前和递增后的主要区别在于返回值。
后递增返回变量增加之前存在的值,实质上是创建旧值的副本。预递增返回对新值的引用,从而避免创建临时变量。
一般来说,它没有区别,主要是品味问题,但在某些内存不足的情况下,预增量选项可能更有用。我还读到增量后版本应该更慢(因为它创建了一个新的临时变量),但我还没有找到任何确凿的证据
预递增通常是首选,因为虽然它对基元类型没有区别,但对于迭代器来说可能更快,因为预递增不必返回其旧值的副本。
由于预增量有时更快(使用迭代器等非基元类型),因此即使没有性能差异,也进入预增量是一个好习惯,这就是许多人推荐它的原因。例如,这是C++编码标准中的第 28 项。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串