目标C,n ++和++ n之间的区别

时间:2011-06-23 06:33:30

标签: objective-c operator-keyword increment

在Objective-C中,n ++和++ n之间是否存在差异(例如,在for循环中使用)?

6 个答案:

答案 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)

++nn++在表达式评估的内容上有所不同。一个例子:

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循环中断。