假设我正在为ASCII字符分配代码,其中代码1分配给ASCII值0,NUL字符,依此类推。我正在迭代地这样做,目前使用i +++ 1,即:
for (int i = 0; i < 256; i++) {
// assign code i++ +1
arr[i].code = i++ +1;
}
如果我改用++ i,那就足够了吗?
答案 0 :(得分:2)
这可能会有所帮助
y = i +++ x - &gt;将x添加到i的当前值,并将结果分配给y,然后递增i的值
y = ++ 1 - &gt;将i递增1并将结果赋值给y
答案 1 :(得分:1)
我更愿意写i++ + 1
。但是,++i
与i+++1
具有相同的效果和价值。
后者在逻辑上做了更多的工作来得出结果:它保留旧值i
,增量i
,将旧值加1并得到总和作为结果。 preincrement运算符只增加i
并使用其新值作为结果。
从技术上讲,两者都应该在给定优化编译器的情况下编译为基本相同的代码。
答案 2 :(得分:1)
是。他们是一样的。
++
的边界比+更严格,因此表达式从左到右依次计算为
s = (i++) + 1
可以进一步扩展为
s = i + 1
i = i + 1
另一方面,s = ++i
执行相同的任务。它可以扩展为
i = i + 1
s = i
您最好使用第二个版本,因为它更具可读性和可扩展性。但我不认为速度会有所不同。
答案 3 :(得分:0)
是的,i +++ 1和++ i都将评估为i加1的值,并且两者都会增加1。
这是一个奇怪的方法,这样做是否有问题:
for (int i = 1; i < 256; i += 2)
我相信,以后阅读你的代码的人会更喜欢后者。