Факты:
i ++ и ++ одинаково легко читаются. Он вам не нравится, потому что вы к нему не привыкли, но, по сути, вы не можете его неправильно истолковать, так что читать и писать больше не нужно.
По крайней мере, в некоторых случаях постфиксный оператор будет менее эффективным.
Тем не менее, в 99,99% случаев это не имеет значения, потому что (а) он будет работать с простым или примитивным типом в любом случае, и это проблема, только если он копирует большой объект; (б) он не будет работать критическая часть кода (с), вы не знаете, оптимизирует ли это компилятор или нет, это может сделать.
Таким образом, я предлагаю использовать префикс, если вам не нужен постфикс - это хорошая привычка, потому что (а) это хорошая привычка быть точным с другими вещами и (б) однажды в синей луне вы намереваетесь использовать постфикс и поймите это неправильно: если вы всегда пишете, что имеете в виду, это менее вероятно. Всегда есть компромисс между производительностью и оптимизацией.
Вы должны руководствоваться здравым смыслом, а не микрооптимизировать, пока вам это не нужно, но ни один из них не должен быть явно неэффективным ради этого. Как правило, это означает: во-первых, исключить любую конструкцию кода, которая неприемлемо неэффективна даже в некритическом коде (обычно что-то, представляющее фундаментальную концептуальную ошибку, такую как передача 500-мегабайтных объектов по значению без причины); и во-вторых, из всех других способов написания кода, выберите самый ясный.
Тем не менее, здесь, я полагаю, ответ прост: я считаю, что написание префикса, если только вам конкретно не нужен постфикс, (а) очень незначительно яснее и (б) очень незначительно с большей вероятностью будет более эффективным, поэтому вы всегда должны писать это по умолчанию, но не беспокойся об этом, если забудешь.
Шесть месяцев назад я думал так же, как и вы, что i ++ был более естественным, но это чисто то, к чему вы привыкли.
РЕДАКТИРОВАТЬ 1: Скотт Мейерс, в "Более эффективном C ++", которому я обычно доверяю в этом вопросе, говорит, что в общем следует избегать использования оператора postfix для пользовательских типов (поскольку единственная разумная реализация функции приращения postfix - это создание копии объекта, вызовите функцию приращения префикса для выполнения приращения и верните копию, но операции копирования могут быть дорогими).
Итак, мы не знаем, существуют ли какие-либо общие правила относительно (а) того, верно ли это сегодня, (б) применимо ли оно (в меньшей степени) к внутренним типам (в) следует ли использовать «++» для что-нибудь большее, чем легкий класс итераторов. Но по всем причинам, которые я описал выше, не имеет значения, делай то, что я сказал раньше.
РЕДАКТИРОВАТЬ 2: Это относится к общей практике. Если вы думаете, что это имеет значение в каком-то конкретном случае, то вам следует профилировать его и посмотреть. Профилирование легко и дешево и работает. Исходя из первых принципов, то, что нужно оптимизировать, сложно, дорого и не работает.
i++
прежде чем я знал, что это может повлиять на производительность++i
, поэтому я переключился. Сначала последнее выглядело немного странно, но через некоторое время я привык к нему, и теперь это кажется таким же естественным, какi++
.