免责声明:我完全清楚前缀和后缀增量的语义。因此,请不要向我解释它们的工作原理。
阅读有关堆栈溢出的问题,我不禁注意到程序员一遍又一遍地被后缀增量运算符弄糊涂了。由此产生以下问题:是否存在用例后缀增量在代码质量方面真正受益的用例?
让我用一个例子来澄清我的问题。这是以下内容的超级简洁实现strcpy
:
while (*dst++ = *src++);
但这并不是我书中最能自我记录的代码(它会在理智的编译器上产生两个烦人的警告)。那么以下替代方案有什么问题呢?
while (*dst = *src)
{
++src;
++dst;
}
然后,我们可以摆脱条件中令人困惑的分配,并获得完全无警告的代码:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(是的,我知道,src
并且dst
在这些替代解决方案中将具有不同的结束值,但是由于strcpy
在循环之后立即返回,因此在这种情况下无关紧要。)
后缀增加的目的似乎是使代码尽可能简洁。我只是看不到我们应该如何努力。如果这最初是关于性能的,那么今天它仍然有意义吗?
int c = 0; c++;
strcpy
这种方式实际编码该方法(出于您已经提到的原因)。