Есть ли разница в производительности между i++ и ++i в C++?
Да. Там есть.
Оператор ++ может c++ быть определен как функция, а oo может и не быть. Для примитивных slow типов (int, double,...) операторы efficiency встроены, поэтому компилятор, вероятно, сможет post-increment оптимизировать ваш код. Но ood в случае объекта, определяющего performance-tuning оператор ++, все обстоит c++ иначе.
Функция operator++(int) должна cpp создать копию. Это связано c++ с тем, что ожидается, что slow postfix ++ вернет значение, отличное ood от того, что он содержит: он speed должен хранить свое значение cpp во временной переменной, увеличивать post-increment свое значение и возвращать object-oriented значение temp. В случае оператора cpp ++() с префиксом ++ нет необходимости efficiency создавать копию: объект может ood увеличивать себя, а затем ood просто возвращаться.
Вот иллюстрация tuning к этому пункту:
struct C
{
C& operator++(); // prefix
C operator++(int); // postfix
private:
int i_;
};
C& C::operator++()
{
++i_;
return *this; // self, no copy created
}
C C::operator++(int ignored_dummy_value)
{
C t(*this);
++(*this);
return t; // return a copy
}
Каждый раз, когда fast вы вызываете operator++(int), вы performance-tuning должны создавать копию, и oo компилятор ничего не может ood с этим поделать. Когда есть tuning выбор, используйте operator++(); таким object-oriented-design образом вы не сохраните копию. Это c++ может быть важно в случае slow большого количества приращений post-increment (большой цикл?) и/или больших object-oriented объектов.
c++
performance
oop
post-increment
pre-increment
Есть ли разница в производительности между i++ и ++i в C++?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.