Разница между arr [0] ++ и ++ arr [0] - PullRequest
1 голос
/ 19 октября 2010

В C # есть ли разница между кодом (все в одном выражении, а не частью большего) arr[0]++; и ++arr[0];

Я полностью понимаю, что в C /C ++ / Objective-C, что это не будет делать то же самое, первый случай получит значение по 0-му индексу arr и увеличит это значение на единицу, в то время как второй увеличивает значение указателя arr и ничего не делает с его 0-мпозиция (такая же как arr[1]; arr++;).

Благодаря sth он напомнил мне, что это то же самое в C # и C / C ++ / Obj-C.

Однако,Есть ли разница между двумя операторами в C #?

Ответы [ 4 ]

11 голосов
/ 19 октября 2010

arr[0]++ возвращает значение первого элемента arr, затем увеличивает его.

++arr[0] увеличивает значение первого элемента arr, затем возвращает его

Разница имеет значение, только если вы используете это как часть более длинной инструкции. Например:

arr[0] = 42;
int x = arr[0]++; // x is now 42, arr[0] is now 43

Не совпадает с:

arr[0] = 42;
int x = ++arr[0]; // x is now 43, arr[0] is now 43
1 голос
/ 19 октября 2010

++ x увеличивается, а затем возвращается, в то время как x ++ возвращает значение x, а затем увеличивается! Но если некому получить значение, все равно.

1 голос
/ 19 октября 2010

Если это один оператор , то нет никакой разницы.

0 голосов
/ 19 октября 2010

Оптимизирующий компилятор должен сгенерировать тот же код, если этот оператор существует сам по себе, но когда вы используете значение, которое вы изменяете в строке, постинкремент может потребовать создания копии (так что вы можете работать со старым значением) , который может быть дорогим, если массив имеет тип, который имеет дорогой конструктор копирования.

...