5 ответов:
++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--;.
++n увеличивает значение до его использования (pre-increment) и N++ увеличивает после (post-increment).
В контексте цикла for нет заметной разницы, так как инкремент применяется после выполнения кода в цикле.
++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
В книге Скотта Мейерса "более эффективный 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;Как вы можете видеть, в постфиксном падеже больше инструкций. В простых циклах for большинство компиляторов достаточно умны, чтобы избежать копирования, если очевидно, что предварительное приращение n не будет использоваться, но этот случай переходит в префиксный случай.Я надеюсь, что это имеет смысл. Таким образом, вы должны использовать префикс, если вы действительно не хотите" побочный эффект " поведения оценить затем инкремент, который вы получаете от постфикса версия.
Comments