繁体   English   中英

使用i ++(或++ i)真的是一种好习惯吗? [关闭]

[英]Is using i++ (or ++i) really a good practice? [closed]

我知道的差异之间我++和++我(像这样 ),如果我想用自己的新值。 而且我看到了C编程语言(K&R)中的许多示例都使用诸如s[i++] = c;表达式s[i++] = c; 有时,我遇到代码(如下所示)使我感到困惑,并且这种样式似乎被他们重新定义了。

while (*string1++ = *string2++); //in c

在这篇文章中 ,乔恩“避免使用”这种风格。

所以我的问题是像上面的代码那样使用i ++(或++ i)是一个好习惯吗? 如果没有,我应该在哪种情况下使用它(仅当我不使用其新阀门时?)

就增加变量的想法而言,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+=1i=i+1相比,编写i++更简洁,它可以帮助您删除不传达该算法基本要素的代码行。

当然,乔恩·斯基特(Jon Skeet)是对的(与往常一样),它会使您的代码更难以理解:从精神上区分++ii++是您的大脑必须经历的另一个循环,以了解正在发生的事情。

在某些情况下,您想要的是更精细的代码; 有时候您不太在意。 确实没有任何严格的规则。

当然,话虽如此,我个人建议不要使用i++++i作为函数参数(即foo(i++) ),因为如果您不太谨慎的话,这可能会引入一些很难跟踪的错误,或者将它们与其他运算符混合(例如,Bryan Chen的i++ + k++示例)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM