Есть ли разница в производительности между 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

2022-11-10T22:43:09+00:00