Я пытаюсь показать на примере, что приращение префикса более эффективно, чем приращение постфикса.
Теоретически это имеет смысл: i ++ должен иметь возможность возвращать неувеличенное исходное значение и, следовательно, сохранять его, тогда как ++ i может возвращать увеличенное значение без сохранения предыдущего значения.
Но есть ли хороший пример, чтобы показать это на практике?
Я пробовал следующий код:
int array[100];
int main()
{
for(int i = 0; i < sizeof(array)/sizeof(*array); i++)
array[i] = 1;
}
Я скомпилировал его с помощью gcc 4.4.0 вот так:
gcc -Wa,-adhls -O0 myfile.cpp
Я сделал это снова, изменив приращение постфикса на приращение префикса:
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
Результат - идентичный ассемблерный код в обоих случаях.
Это было несколько неожиданно. Казалось, что, отключив оптимизацию (с -O0), я увижу разницу, чтобы показать концепцию. Что мне не хватает? Есть лучший пример, чтобы показать это?
array
хранит в своих элементах, вы, скорее всего, столкнетесь с ошибкой, если будете использоватьsizeof(int)
вместоsizeof(*array)
, поскольку велика вероятность, что вы также забудете изменить на этом месте. Код постоянно меняется, поэтому всегда стремитесь упростить внесение в него изменений, что обычно означает сокращение количества мест, которые вам нужно изменить в коде, чтобы изменения произошли, особенно если это места. который будет компилироваться, даже если вы их не измените (как в этом случае). - person HelloGoodbye   schedule 07.01.2014