在Objective-C中,n ++和++ n之间是否存在差异(例如,在for循环中使用)?
答案 0 :(得分:16)
++n;
会增加n
的值。
n++;
会增加n
的值。
比较这个
的结果int n = 41;
int o = ++n; //n = 42, o = 42
结果如下:
int n = 41;
int o = n++; //n = 42, o = 41
在循环的情况下:
for (int i = 0; i < j; i++) {/*...*/}
然而它没有任何区别,除非你有这样的东西:
for (int i = 0; i < j; x = i++) {/*...*/}
或者这个:
for (int i = 0; i < j; x = ++i) {/*...*/}
可以说:
只要在同一表达式中没有修改第二个(相关的)变量(基于n),是否使用
n++
或++n
无关紧要。
显然,同样的规则适用于--n;
和n--;
。
答案 1 :(得分:3)
++ n在使用前增加值(预增量),在增量后增加n ++。
在for循环的上下文中,没有可观察到的差异,因为在执行循环中的代码之后应用增量。
答案 2 :(得分:2)
++n
和n++
在表达式评估的内容上有所不同。一个例子:
int n = 0;
NSLog(@"%d", n); // 0
NSLog(@"%d", n++); // still 0, increments afterwards
NSLog(@"%d", n); // 1
NSLog(@"%d", ++n); // 2, because it increments first
NSLog(@"%d", n); // 2
答案 3 :(得分:0)
在循环中它不会有所作为。有人说++n
虽然更快
答案 4 :(得分:0)
在Scott Meyers的“更有效的C ++”一书中,他提出了一个非常合理的理由,更喜欢前缀增量到后缀增量。简而言之,由于运算符重载,设备前缀增量几乎总是更快。 Objective C不支持重载运算符,但如果您已经或将要进行任何C ++或Objective-C ++编程,那么首选前缀增量是一个很好的习惯。
请记住,大部分时间++ n看起来像:
n = n + 1 [do something with n]
而n ++看起来像(如果按预期使用):
register A = n; // copy n [do something with n] n = A + 1;
正如您所看到的,postfix案例有更多说明。在简单的for循环中,大多数编译器都足够智能,以避免复制,如果显然不会使用预增量n但是这种情况转换为前缀情况。
我希望这是有道理的。总之,你应该使用前缀,除非你真的想要评估的“副作用”行为然后从后缀版本获得增量。
答案 5 :(得分:0)
如上所述,
-n 在计算表达式之前减小n的值。
n-; 对表达式求值后的n值递减。
这里要注意的是使用while循环时
例如:
n = 5
while(n--) #Runs the loop 5 times
while(--n) #Runs the loop 4 times
与n一样-循环运行额外的时间,而n = 1 但是在--n中,1首先减为0,然后求值。这会导致while循环中断。