Fakty:
i ++ i ++ i są równie łatwe do odczytania. Nie lubisz jednego, ponieważ nie jesteś do tego przyzwyczajony, ale zasadniczo nie ma niczego, co można by błędnie zinterpretować, więc nie trzeba już czytać ani pisać.
W przynajmniej niektórych przypadkach operator postfiksów będzie mniej wydajny.
Jednak w 99,99% przypadków nie będzie to miało znaczenia, ponieważ (a) i tak będzie działał na prostym lub prymitywnym typie i jest to tylko problem, jeśli kopiuje duży obiekt (b), nie będzie występował krytyczna część kodu (c) nie wiesz, czy kompilator go zoptymalizuje, czy nie, może to zrobić.
Dlatego sugeruję używanie prefiksu, chyba że konkretnie postfiks jest dobrym nawykiem, aby się do niego przyzwyczaić, tylko dlatego, że (a) dobrym nawykiem jest precyzowanie innych rzeczy i (b) raz na niebieskim księżycu będziesz chciał użyć postfiksu i odwrotnie: jeśli zawsze piszesz, co masz na myśli, jest to mniej prawdopodobne. Zawsze występuje kompromis między wydajnością a optymalizacją.
Powinieneś stosować zdrowy rozsądek, a nie mikrooptymalizować, dopóki nie będziesz tego potrzebować, ale nie bądź rażąco nieefektywny ze względu na to. Zazwyczaj oznacza to: po pierwsze, wyklucz konstrukcję kodu, która jest niedopuszczalnie nieefektywna nawet w kodzie niekrytycznym czasowo (zwykle coś reprezentuje podstawowy błąd koncepcyjny, taki jak przekazywanie wartości 500 MB obiektów bez powodu); a po drugie, z każdego innego sposobu pisania kodu wybierz najczystszy.
Jednak tutaj uważam, że odpowiedź jest prosta: uważam, że pisanie prefiksu, chyba że potrzebujesz konkretnie postfiksa, jest (a) bardzo marginalnie wyraźniejsze i (b) bardzo marginalnie bardziej wydajne, więc zawsze powinieneś pisać to domyślnie, ale nie martw się, jeśli zapomnisz.
Sześć miesięcy temu myślałem tak samo jak ty, że i ++ jest bardziej naturalny, ale jest to po prostu to, do czego przywykłeś.
EDYCJA 1: Scott Meyers w „Bardziej efektywnym C ++”, któremu ogólnie ufam w tej kwestii, mówi, że ogólnie powinieneś unikać używania operatora Postfiksa na typach zdefiniowanych przez użytkownika (ponieważ jedyną rozsądną implementacją funkcji przyrostu Postfiksa jest utworzenie kopiowanie obiektu, wywołaj funkcję inkrementacji prefiksu, aby wykonać inkrementację i zwróć kopię, ale operacje kopiowania mogą być kosztowne).
Nie wiemy więc, czy istnieją jakieś ogólne zasady dotyczące (a) czy jest to prawdą dzisiaj, (b) czy ma to zastosowanie (w mniejszym stopniu) do typów wewnętrznych (c) czy powinieneś używać „++” na cokolwiek więcej niż lekka klasa iteratorów. Ale ze wszystkich powodów, które opisałem powyżej, nie ma znaczenia, rób to, co powiedziałem wcześniej.
EDYCJA 2: Odnosi się do ogólnej praktyki. Jeśli uważasz, że to ma znaczenie w konkretnym przypadku, powinieneś go profilować i zobaczyć. Profilowanie jest łatwe i tanie i działa. Odejście od pierwszych zasad, które należy zoptymalizować, jest trudne i kosztowne i nie działa.
i++
zanim wiedziałem, że może to wpłynąć na wydajność++i
, więc przełączyłem się. Na początku ten ostatni wyglądał trochę dziwnie, ale po pewnym czasie przyzwyczaiłem się do tego, a teraz wydaje się tak naturalny jaki++
.