RPH - blog

Blog programisty

C++, operatory pre i post inkrementacji w nowoczesnych kompilatorach

Opublikowany: Czwartek 07.01.2016
0

Bardzo popularnym zaleceniem dla programistów C++, jest rada, aby tam gdzie jest tylko możliwe używać operatora pre inkrementacji, zamiast post inkrementacji, szczególnie w pętlach.

Zalecenie to znajduje się w dokumencie Collaborative Collection of C++ Best Practices, w rozdziale przeznaczonym wydajności: https://github.com/lefticus/cppbestpractices/blob/master/08-Considering_Performance.md#prefer-i-to-i

Dobre wyjaśnienie dlaczego należy tak postępować znajduje się na blogu Gynvael Coldwind: C/C++ szybkość i++ oraz ++i once more, reply (niestety link do kodzimy.net, który jest tam umieszczony nie działa).

Zatem, operator pre inkrementacji, w przeciwieństwie do operatora post inkrementacji, nie tworzy tymczasowej kopii obiektu. Jest tak dla typów, które nie są typami podstawowymi, ale np. iteratorami.

Ponieważ nowoczesne kompilatory potrafią bardzo agresywnie optymalizować kod wynikowy, tak, że wygenerowanego kodu asemblerowego jest mniej niż kodu C++ z którego powstał (jaskrawy przykład tu: A flexible lexicographical comparator for C++ structs ), postanowiłem sprawdzić jak to dziś wygląda w praktyce.

Czytaj dalej...
  • 1