В С# в чем разница между myInt ++ и ++ myInt?
Мне сложно понять, какая разница между приращением переменной на С# следующим образом:
myInt++;
и
++myInt;
Когда когда-нибудь будет важно, какой из них вы используете?
Я дам voteCount ++ для лучшего ответа. Или я должен дать ему ++ voteCount...
Ответы
Ответ 1
Нет никакой разницы при написании самостоятельно (как показано) - в обоих случаях myInt будет увеличиваться на 1.
Но есть разница, когда вы используете его в выражении, например. что-то вроде этого:
MyFunction(++myInt);
MyFunction(myInt++);
В первом случае myInt увеличивается, а новое/увеличиваемое значение передается в MyFunction(). Во втором случае старое значение myInt передается MyFunction() (но myInt все еще увеличивается до того, как вызывается функция).
Другим примером является следующее:
int myInt = 1;
int a = ++myInt;
// myInt is incremented by one and then assigned to a.
// Both myInt and a are now 2.
int b = myInt++;
// myInt is assigned to b and then incremented by one.
// b is now 2, myInt is now 3
BTW: как Don в комментариях указываются те же правила, что и для операций декремента, и правильная терминология для этих операций:
++i; // pre-increment
i++; // post-increment
--i; // pre-decrement
i--; // post-decrement
Как Джон Скит указывает:
Другие показали, где он разница, и прокомментировали это как в одном заявлении он не делает разница.
Я хотел бы добавить, что это почти всегда плохая идея использовать его там, где он имеет значение. Я подозреваю, что там может быть несколько раз, когда он больше читаемый, чтобы иметь код, например:
Console.WriteLine("Foo: {0}", foo++);
чем:
Console.WriteLine("Foo: {0}", foo);
foo++;
... но они очень редки! последний из этих двух образцов заказ кристалла ясно сразу - первый требует немного размышлений (к моему бедному мозгу, во всяком случае). Думать о читаемость первой.
Ответ 2
Другие показали, где это имеет значение, и прокомментировали это как один оператор, это не имеет значения.
Я хотел бы добавить, что почти всегда плохая идея использовать его там, где это имеет значение. Я подозреваю, что может быть несколько раз, когда более читаемо иметь код, например:
Console.WriteLine("Foo: {0}", foo++);
чем:
Console.WriteLine("Foo: {0}", foo);
foo++;
... но они очень редки! Последний из этих двух образцов сразу вызывает упорядочение кристалла - первый требует немного мышления (во всяком случае, для моего слабого мозга). Сначала подумайте о читаемости.
Ответ 3
Это не так, если оно не находится в выражении, т.е.
myInt=1;
x=myInt++;
отличается от:
myInt=1;
x=++myInt;
Первый присваивает значение 1 x, потому что назначение происходит до приращения.
Второй присваивает значение 2 x, потому что назначение происходит после приращения.
Ответ 4
В присваивании или выражениях, например
x = ++myInt; // x = myInt + 1
x = myInt++; // x = myInt
Это также можно использовать в выражениях, подобных циклам или операторам if. Например, возьмите следующее, где seek равен 0, а count - 3.
while(seek++ < count) {
Console.WriteLine(seek);
}
выводит результаты 1, 2 и 3 для поиска и следующие
while(++seek < count) {
Console.WriteLine(seek);
}
Результаты в 1 и 2 для поиска. Таким образом, ++ myInt увеличивает myInt до того, как будет оценено его значение, где myInt ++ увеличивается после его вычисления.
Ответ 5
myInt ++ (4 инструкции процессора)
LOAD AX, #myInt // From myInt memory to a CPU register
COPY AX, BX
INCREMENT BX
STORE BX, #myInt
// Use AX register for the value
++ myInt (3 инструкции процессора)
LOAD AX, #myInt // From myInt memory to a CPU register
INCREMENT AX
STORE AX, #myInt
// Use AX register for the value
Ответ 6
Это разница, если вы делаете
int x = 7;
int x2 = x++;
=> x2 is 7 and x is 8
но при выполнении
int x = 7;
int x2 = ++x;
=> x2 is 8 and x is 8
Ответ 7
Определяет, когда возвращается результат для этой операции.
Вот пример из сайта MSDN:
static void Main()
{
double x;
x = 1.5;
Console.WriteLine(++x);
x = 1.5;
Console.WriteLine(x++);
Console.WriteLine(x);
}
И вывод:
2.5
1.5
2.5
Ответ 8
Оператор pre-fix ++ myInt - это способ сокращения строк: увеличьте переменную до передачи ее в другое место. Это также хороший способ уменьшить удобочитаемость, так как это необычно.
MyMethod(++myInt);
против.
myInt++;
MyMethod(myInt);
Для меня второй намного легче читать.
Ответ 9
Я думаю, что это проще всего понять с точки зрения оценки и модификации.
- Постфиксный оператор (x ++)
сначала оценивает и изменяет последнее.
- Оператор префикса (++ x) изменяет
сначала и оценивает последний.
(порядок операций проявляется в типизированном порядке оператора и переменной)
т.е. при использовании в выражении оператор postfix оценивает и использует переменное текущее значение в выражении (оператор возврата или вызов метода) перед применением оператора. С префиксным оператором это наоборот.
Ответ 10
++ myInt добавит одно к myInt перед выполнением строки, о которой идет речь, myInt ++ сделает это позже.
Примеры:
int myInt;
myInt = 1;
someFunction(++myInt); // Sends 2 as the parameter
myInt = 1;
someFunction(myInt++); // Sends 1 as the parameter
Ответ 11
Если, например, вы делаете что-то вроде этого:
int myInt = 5;
Foo(++myInt);
void Foo(int x)
{
Console.WriteLine(x);
}
Откроется 6.
Foo(myInt++);
распечатает 5;
В принципе, ++ myInt increments FIRST использует переменную SECOND.
myInt ++ - это обратное.