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

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