Co oznacza taki zapis w C++?

0

Dzien dobry!

Moze mi ktos powiedziec co oznacza taki zapis w C++? Znalazlam taki kod w jednym przykladzie i nie rozumiem tego zapisu:

currentStep = (++currentStep < 4) ? currentStep : 0;

Pozdrawiam!

3

Analizę tego należy rozpocząć do wyrażenia w nawiasie, które zwraca wartość logiczną true/false:
++currentStep < 4
w tym przypadku wartość zmiennej currentStep jest zwiększana przed dokonaniem porównania z wartością 4.

Następnie po prawej stronie przypisania mamy wyrażenie warunkowe:
warunek ? wartosc_gdy_true : wartosc_gdy_false
(++currentStep < 4) ? currentStep : 0
jeżeli wynikiem ++currentStep < 4 jest wartość true to wynikiem wyrażenia warunkowego jest: currentStep, w przeciwnym wypadku wartość 0.
Wartość zwrócona przez wyrazenie warunkowe ostatecznie jest przypisywana do zmiennej currentStep.

W skrócie:
zmienna currentStep jest zwiekszana o 1 i jeżeli jest mniejsza od 4 to kopiowana jest do niej wartość aktualna (czyli powiekszona) . Jezeli wartość jest równa lub wieksza od czterech to do zmiennej currentStep kopiowana jest wartość 0.
Efektem tego jest to, że wartość zmiennej przechodzi po kolei po wartościach 0, 1, 2, 3 w koło, w pętli.

Analogiczny kod w mniej zwartej formie:

++currentStep;  // zwiekszenie zmiennej
if(currentStep >= 4) { // sprawdzenie czy nie wykracza poza zakres 0 .. 3
    currentStep = 0; // wyzerowanie wartości jeżeli przekracza
}
0

I wszystko jasne, dziękuję pięknie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1