Какая разница между i++ и ++i?
Возьмем как пример строку:
for (i = ceil(a); i <= floor(b); i++)
cout << i << " ";
В связи с наступлением на нас шаблонов в С++, рекомендуется писать в циклах ++i а не i++. Это связано с тем, что прединкремент для классов обычно реализуется проще, чем постинкремент (как минимум, не надо хранить старое значение для возврата). Поэтому, если к примеру в шаблон в качестве типа счетчика цикла будет подставлено не просто целое, а сверхдлинное целое, то внутри циклов будет меньше ненужной работы.
Никакой.
for (i = ceil(a); i <= floor(b); i++)
Здесь нужно просто увеличить значение переменной на единицу.
А так (когда значение переменной возвращаемое оператором используется) - разница есть:
var i = 1;
var j = 1;
console.log(i++, ++j);
console.log(i, j);
Причем именно такая, какая описана в определении этих операторов.
C++ код для данного примера:
int main()
{
int i = 1, j = 1;
cout << i++ << ", " << ++j << endl;
cout << i << ", " << j << endl;
}
i++ сначала берёт значение переменной, а потом увеличивает переменную i на 1, а ++i наоборот, сначала увеличивает значение переменной i на 1, а потом берёт значение i.
i++ вычисляет i, потом увеличивает.
++i увеличивает i, потом вычисляет.
В дополнение к другим ответам добавлю, что операции постинкремента и прединкремента имеют разные приоритеты. Постинкремент имеет выше приоритет чем преинкремент, поэтому код
int val = 1;
++val++; // Ошибка компиляции!
приведет к ошибке компиляции. Также код вроде
int val = 1;
val++++++; // Ошибка компиляции!
вызовет ошибку компиляции. Но код
int val = 1;
++++++val; // Все хорошо!
скомпилируется и выполнится без ошибок. Все вышесказанное также применимо к операциям декремента.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости