gpt4 book ai didi

c++ - 为什么for循环中的 "++i"和 "i++"有区别?

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:37 26 4
gpt4 key购买 nike

我觉得

for(int i = 0; i < 2; i++)

for(int i = 0; i < 2; ++i)

不应该做同样的事情。对于第二个例子,从循环开始 i 应该等于 1 对我来说更符合逻辑。

最佳答案

在一些处理器上,例如 PDP-11、VAX-11 和 68K,有些指令的模式相当于 *ptr++*--ptr。根据代码编写的确切方式,编译器使用这些指令可能容易也可能不容易 - 因此,使用 *++ptr* 的“正确”变体ptr++ [哪个更好取决于实际循环中的用法] 在这些特定情况下,循环内部可以在性能上产生相当大的差异。然而,对于 ARM 和 x86(我认为,PowerPC 和 MIPS,因此涵盖了几乎所有现代处理器),这种类型的构造无论如何都不是指令集的一部分,而且现在的编译器比以前聪明得多,比如说,10 或 20 年前。

任何合理的编译器都会对基本类型做同样的事情,i++++i 不是问题。

如果我们有一个“复杂”的类型,例如一个结构或类有一个 operator++(int),和 opterator++() 可能会有一个小的区别 [或者在极端情况下,差异很大],因为必须复制对象。假设我们有一个 bigmath 类,我们的 i 是一个 1000 位的长值。现在我们必须在增量的中间制作一个(n 个额外的)1000 位数字的拷贝。如果编译器能够“理解”正在发生的事情,它可能会删除该拷贝,但不能保证会发生。

关于c++ - 为什么for循环中的 "++i"和 "i++"有区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com