Есть ли разница в производительности между i++ и ++i в C++?
Да. Там есть.
Оператор ++ может oops быть определен как функция, а performance-tuning может и не быть. Для примитивных efficiency типов (int, double,...) операторы performance-tuning встроены, поэтому компилятор, вероятно, сможет efficiency оптимизировать ваш код. Но oops в случае объекта, определяющего speed оператор ++, все обстоит cxx иначе.
Функция operator++(int) должна pre-increment создать копию. Это связано performance с тем, что ожидается, что pre-increment postfix ++ вернет значение, отличное slow от того, что он содержит: он oop должен хранить свое значение performance-tuning во временной переменной, увеличивать pre-increment свое значение и возвращать fast значение temp. В случае оператора c++ ++() с префиксом ++ нет необходимости post-increment создавать копию: объект может efficiency увеличивать себя, а затем oo просто возвращаться.
Вот иллюстрация fast к этому пункту:
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
}
Каждый раз, когда oo вы вызываете operator++(int), вы slow должны создавать копию, и slow компилятор ничего не может oops с этим поделать. Когда есть object-oriented-design выбор, используйте operator++(); таким cxx образом вы не сохраните копию. Это tuning может быть важно в случае oo большого количества приращений oops (большой цикл?) и/или больших performance-tuning объектов.
c++
performance
oop
post-increment
pre-increment
Есть ли разница в производительности между i++ и ++i в C++?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.