Возвращаемое значение level++
будет level
и therefore
передать level
в DoStuff
. Это может быть довольно неприятной ошибкой, поскольку рекурсия никогда не закончится (из того, что показано, DoStuff
всегда передается с одним и тем же значением). Возможно, вместо этого подразумевается ++level
или level + 1
?
level + 1
передаст level + 1
в DoStuff
и оставит level
без изменений для остальной части функции.
Оператор постинкремента (переменная ++) точно эквивалентен функции
int post_increment(ref int value)
{
int temp = value;
value = value + 1
return temp;
}
, в то время как оператор предварительного увеличения (переменная ++) точно эквивалентен функции
int pre_increment(ref int value)
{
value = value + 1;
return value;
}
Следовательно, если вы развернете оператор inline в код, операторы будут эквивалентны:
DoStuff(a + 1)
int temp = a + 1;
DoStuff(temp);
DoStuff(++a)
a = a + 1;
DoStuff(a);
DoStuff(a++);
int temp = a;
a = a + 1;
DoStuff(temp);
Важно отметить, что постинкремент не эквивалентен:
DoStuff(a);
a = a + 1;
Кроме того, в качестве точки стиля нельзя увеличивать значение, если только не предполагается использовать увеличенное значение (конкретная версия правила ", не присваивайте значение переменной, если вы не планируете использовать это значение "). Если значение i + 1
никогда больше не используется, тогда предпочтительное использование должно быть DoStuff(i + 1)
, а не DoStuff(++i)
.