我今天看到这段代码:
if(++counter == 10)
{
//Do Something
foo();
}
我认为这是不好的风格,但是,执行编译器是否也依赖于它?假设在我们到达这一行之前计数器设置为 8,它会增加它,然后比较 10 和 8,之前的值,或者比较 10 和 9,计数器增加后的值?
你怎么看?这是常见的做法吗?坏风格?
最佳答案
此代码的行为与编译器无关(除了可能的溢出行为)。款式好不好,看个人喜好了。我通常避免在条件语句中进行修改,但有时它可能很有用,甚至很优雅。
此代码保证将 新 值与 10 进行比较(即在您的示例中将 9 与 10 进行比较)。正式地说,比较发生在 counter
递增之后是不正确的。这里没有“之前”或“之后”。新值可以预先计算并与 10 进行比较,甚至在它被物理放入 counter
之前。
换句话说,++counter == 10
的计算可以如下进行
counter = counter + 1
result = (counter == 10)
或作为
result = ((counter + 1) == 10)
counter = counter + 1
请注意,在第一种情况下,counter
在比较之前递增,而在第二种情况下,它在比较之后递增。这两种情况在实践中都是有效且完全可能的。这两种情况都会产生语言规范要求的相同结果。
关于c - 你认为这种糟糕的编码风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261610/