在循环语句中,for(i=0;i?

 我来答
link专注休闲娱乐
高能答主

2021-11-19 · 关注影视娱乐,关心休闲娱乐
link专注休闲娱乐
采纳数:169 获赞数:61094

向TA提问 私信TA
展开全部

在C++里,假如i是int,那么没有任何不同,无论开不开优化,你没有使用自增后的i值,编译器根本就不会“复制”一个i。

如果i是个自定义类型,又自定义了前缀和后缀++操作符,那自然是不一样的。

如果 i 是系统类型,两者没有性能区别。绝大多数编译器可以生成同效率代码。由于所谓的多余复制的变量并没有被用到(i++的返回值无人使用),所以编译器优化之后跟++i等价。

两者性能区别理论上存在于当 i 是一个自定义的类,并且这个类重载了++操作符,并且这个类重载「后增量」操作符时使用了值复制作为返回值的情况,在这种情况下,有时编译器能优化掉多余的复制,有时不能。

i++的话要先copy出一个i然后赋值,用原来的i继续其他运算,最后再把copy出来的i做个increment,然后返还给原来的i。

而++i直接在原来的i上做increment。

总结如下:

当n很大的时候,++i速度比i++快。

比如语法上a = i++; 是等号右边的变量赋值给左边的变量,但是赋值应发生在所有运算之后。这就比较矛盾,如果用上诉理论就能解释得清楚。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式