在循环语句中,for(i=0;i?
1个回答
展开全部
在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++; 是等号右边的变量赋值给左边的变量,但是赋值应发生在所有运算之后。这就比较矛盾,如果用上诉理论就能解释得清楚。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询