Którą wersję operatora inkrementacji powinniśmy stosować w pętli for i dlaczego?
Spójrzmy na dwa przykładowe kody:
for( int i = 0; i < 3; i++)
{
std::cout << i << "\n";
}
for( int i = 0; i < 3; ++i)
{
std::cout << i << "\n";
}
W obu przypadkach wynikiem będzie:
0
1
2
- ++i - operator pre-inkrementacji, zwiększa wartość zmiennej i o jeden, następnie pobiera jej wartość
- i++ - operator post-inkrementacji, pobiera wartość zmiennej i, następnie zwiększa jej wartość o jeden
Korzystniejsze jest jednak korzystanie z operatora pre-inkrementacji. Może być to nieco zaskakujące, ale jest to prawda. Pomyślmy o tym jak każda z wersji operatora inkrementacji działa, gdy to przeanalizujemy łatwo zauważyć że w przypadku post-inkrementacji istnieje potrzeba aby przechować gdzieś wartość która po zwróceniu zostanie zwiększona o 1, taka sytuacja nie występuje przy pre-inkrementacji gdzie od razu zwiększamy wartość a następnie ją zwracamy. Oznacza to zatem że kod generowany przy użyciu ++i jest bardziej wydajny niż przy i++, to samo dotyczy oczywiście operatora deinkrementacji.