Факти:
i ++ і ++ i однаково легко читати. Вам це не подобається, тому що ви до цього не звикли, але, по суті, немає нічого, чому ви можете його неправильно трактувати, тому читати чи писати більше не виходить.
Принаймні в деяких випадках оператор postfix буде менш ефективним.
Однак у 99,99% випадків це не має значення, оскільки (а) воно все одно буде діяти на простий або примітивний тип, і це проблема лише в тому випадку, якщо він буде копіювати великий об'єкт (б), він не буде в виконанні критична частина коду (с), яку ви не знаєте, оптимізує її компілятор чи ні, це може зробити.
Таким чином, я пропоную використовувати префікс, якщо вам спеціально не потрібен постфікс - це корисна звичка потрапляти лише тому, що: (а) це корисна звичка бути точним до інших речей і (б) одного разу на блакитному місяці ви збираєтесь використовувати постфікс і зрозуміти це неправильно: якщо ти завжди пишеш те, що маєш на увазі, то це менш ймовірно. Завжди існує компроміс між ефективністю та оптимізацією.
Ви повинні використовувати здоровий глузд і не робити мікрооптимізацію, поки не потрібно, але й бути радикально неефективною заради цього. Як правило, це означає: по-перше, виключіть будь-яку побудову коду, яка є неприйнятно неефективною навіть у некритичному за часом коді (як правило, щось, що представляє фундаментальну концептуальну помилку, як, наприклад, передача об'єктів 500 МБ за значенням без будь-якої причини); по-друге, з кожного іншого способу написання коду вибирайте найясніший.
Однак тут я вважаю, що відповідь проста: я вважаю, що написання префіксу, якщо вам спеціально не потрібен постфікс, є: (а) дуже чітко і (б) дуже незначно, швидше, більш ефективним, тому завжди слід писати це за замовчуванням, але не переживайте про це, якщо забудете.
Півроку тому я вважав те саме, що і ви, що я ++ є більш природним, але це суто те, до чого ви звикли.
EDIT 1: Скотт Майєрс у "Ефективнішій C ++", якому я взагалі довіряю цю річ, говорить, що вам слід взагалі уникати використання оператора postfix для визначених користувачем типів (тому що єдиною розумною реалізацією функції збільшення постфікса є створення скопіюйте об'єкт, зателефонуйте на функцію збільшення префікса, щоб виконати приріст, і поверніть копію, але операції з копіювання можуть бути дорогими).
Отже, ми не знаємо, чи є якісь загальні правила щодо (а) чи це правда сьогодні, (б) чи застосовуються вони (не так) до внутрішніх типів (в) чи слід використовувати "++" на що-небудь більше, ніж легкий клас ітераторів коли-небудь. Але з усіх причин, які я описав вище, не має значення, виконайте те, що я говорив раніше.
EDIT 2: Це стосується загальної практики. Якщо ви думаєте, що це має значення в якомусь конкретному випадку, тоді ви повинні профайлювати його і побачити. Профілювання легко і дешево і працює. Виходячи з перших принципів, те, що потрібно оптимізувати, важко і дорого і не працює.
i++
раніше, ніж знав, що це може вплинути на продуктивність++i
, тому я перейшов. Спочатку останній виглядав дещо дивно, але через деякий час я звик до цього, і зараз це виглядає так само природноi++
.