
[英]Different results when using increment operator (arr[i++] vs arr[i]; i++;)
[英]Is using i++ (or ++i) really a good practice? [closed]
就增加变量的想法而言,i ++本身就是一个清晰,惯用的表达方式。 就其本身而言,它就变得很清楚。 计算机语言是根据该惯用语(C ++)命名的。
乔恩并不是说要避免使用“ i ++”。 他说要避免将它与其他会使事情复杂化的表达式结合在一起,因为增量操作是“副作用”。 喜欢:
arr2[++j] = arr[++i]; // now what the heck is going on? I have to stop and look.
在这种情况下,避免这种情况更为合理,我同意他的看法。 当您开始调整代码,四处移动或添加逻辑时,增量可能会消失,移动,变得多余等,通常最好单独在一行上执行,或者在循环头中执行增量。
关于++运算符,除了它是一个天才的想法外,有趣的是,前缀和后缀的替代方案编码的不仅是“ i = i + 1”,它们还编码了对操作符左侧或右侧的附加评估。可以这么说。 (或者您可以将其视为评估前/评估后)。
因此,++ i在功能上是:
i = i + 1; return i
并且i ++在功能上是:
temp = i; i = i + 1; return temp
这种差异通过隐藏bug引起了额外的“麻烦”,并且您可以了解为什么,如果编译器没有优化生成的代码,它们具有不同的性能影响。
这似乎很大程度上取决于个人风格和情况要求。
与i+=1
或i=i+1
相比,编写i++
更简洁,它可以帮助您删除不传达该算法基本要素的代码行。
当然,乔恩·斯基特(Jon Skeet)是对的(与往常一样),它会使您的代码更难以理解:从精神上区分++i
和i++
是您的大脑必须经历的另一个循环,以了解正在发生的事情。
在某些情况下,您想要的是更精细的代码; 有时候您不太在意。 确实没有任何严格的规则。
当然,话虽如此,我个人建议不要使用i++
或++i
作为函数参数(即foo(i++)
),因为如果您不太谨慎的话,这可能会引入一些很难跟踪的错误,或者将它们与其他运算符混合(例如,Bryan Chen的i++ + k++
示例)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.