Рассмотрим, как постинкремент обычно реализуется в определяемом пользователем типе:
MyIterator operator++(int) {
MyIterator retval(*this);
++*this;
return retval;
}
Итак, у нас есть два вопроса: может мой компилятор оптимизировать это в случаях, когда возвращаемое значение не используется, и будет мой компилятор оптимизировать это в тех случаях, когда возвращаемое значение не используется?
Что касается "может ли это?", То, безусловно, бывают случаи, когда это невозможно. Если код не указан, нам не повезло. Если конструктор копирования MyIterator имеет наблюдаемые побочные эффекты, то нам не повезло - elision конструктора копирования позволяет создавать возвращаемые значения и копии временных объектов, поэтому, по крайней мере, значение может быть скопировано только один раз. Но это не позволяет возвращаемым значениям вообще не создаваться. В зависимости от вашего компилятора, выделение памяти вполне может быть заметным побочным эффектом.
Конечно, итераторы, как правило, предназначены для встраивания, и итераторы, как правило, легковесны и не потребуют никаких усилий для копирования. Пока мы в порядке по этим двум пунктам, я думаю, что мы в деле - компилятор может встроить код, определить, что retval
не используется и что его создание не имеет побочных эффектов, и удалить его. Это просто оставляет предварительное увеличение.
Что касается "будет ли это?" Попробуйте это на вашем компиляторе. Я не могу быть обеспокоен, потому что я всегда использую предварительное увеличение, где два эквивалентны; -)
Что касается «нужно ли учитывать эту оптимизацию при написании кода?», Я бы сказал, что это не так, но преждевременная пессимизация так же вредна, как и преждевременная оптимизация. Тот факт, что один (в лучшем случае) является пустой тратой времени, не означает, что другой благороден - не пытайтесь сделать свой код медленнее только потому, что можете. Если кто-то искренне предпочитает видеть i++
в цикле, то вряд ли когда-либо замедлит его код, поэтому он может оптимизировать для эстетики, если это необходимо. Лично я предпочел бы, чтобы люди улучшали свой вкус ...