Объект постпостепенно увеличивается, когда предварительное постепенное увеличение быстрее
Этот дефект повышен, когда вы используете постинкрементную или постдекрементную операцию вместо более эффективной преинкрементной или преддекрементной операции. Преинкрементная операция одинаково или более эффективна, когда все эти условия верны:
Пред и шаг сообщения или декрементные операции заданы для объекта.
Тип возврата постинкрементной или декрементной операции является дорогим, чтобы скопировать.
Возвращенное значение не использовано.
Тип возврата преинкрементной или декрементной операции не является дорогим, чтобы скопировать, такие как ссылка.
КПД преинкрементных и преддекрементных операций зависят от версии и реализации стандарта C++, который вы используете. Если вы переключаете версию C++ или реализацию библиотеки, вы можете видеть изменение в количестве нарушения этой проверки.
Постинкрементные или декрементные операции создают копию объекта, постепенно увеличивают или постепенно уменьшают оригинал, и затем возвращают скопированный объект. Когда объект является дорогим, чтобы скопировать, и вы не используете возвращенную копию объекта, постинкрементная или постдекрементная операция неэффективна. Используйте преинкрементную или преддекрементную операцию, которая не копирует объект и обычно возвращает ссылку на постепенно увеличенный или декрементный объект. Непреднамеренно использующий постинкремент вместо преинкремента с большим объектом может сделать код неэффективным. Код, который использует неэффективные постинкрементные или постдекрементные компиляции операций и ведет себя правильно. Неэффективные операции могут остаться необнаруженными.
Когда вы не будете использовать возвращенный объект от декрементной или инкрементной операции, используйте преинкрементную операцию.
При итерации по каждому элементу контейнера вы можете хотеть использовать циклы, которые не требуют инкрементных или декрементных операций, таких как std::for_each
или основанный на области значений for
цикл. Эти циклы оптимизированы для таких итераций. Они не требуют ручных инкрементных или декрементных операций.
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
EXPENSIVE_POST_INCREMENT |
Удар: низко |
Find defects (-checkers)
| C++ standard version (-cpp-version)
| Compiler (-compiler)