Każda instrukcja jest zakończona średnikiem + pętle, switche, ify (to są wtedy tzw. instrukcje sterujące)..... natomiast wyrażenie musi posiadać jakąś wartość.
Operacja jest wtedy, gdy występuje jakiś operator. Przykładowe operatory:
= operator przypisania
== operator porównania
++ operator inkrementacji
&& operator iloczynu logicznego (koniunkcji)
Wiedzę opieram o książkę J. Grębosza, Symfonia C++
---------------------------------------------------------------------------------------------
int i = 0;
i = 0 --> operacja przypisania
int i = 0; --> (jedna) instrukcja
i = 0 --> wyrażenie, bo każde przypisanie samo w sobie jest wyrażeniem mającym taką samą wartość, jaka jest przypisywana. Czyli:
(i = 5) <-- ten nawias ma wartość 5
---------------------------------------------------------------------------------------------
5 < 3 --> operacja porównania
(5 < 3) --> wyrażenie, nawias ma wartość false
---------------------------------------------------------------------------------------------
P++ --> operacja postinkrementacji. To również jest wyrażeniem, lecz jest jedna znacząca różnica. O tym zaraz.
---------------------------------------------------------------------------------------------
int P = 0;
po wpisaniu: if( P++ == 0 ), otrzymamy TRUE (postinkrementacja, zwiększenie o jeden następuje na zakończenie instrukcji, ewentualnie można posłużyć się nawiasem)
po wpisaniu if( ++P == 0 ), otrzymamy FALSE (preinkrementacja, najpierw zwiększamy(++), a potem porównujemy(==). Trzeba też patrzeć na priorytety operatorów)
---------------------------------------------------------------------------------------------
Teraz ważna rzecz o warunkach. Przeczytaj to uważnie i zastanów się dlaczego tak jest.
if( a > b ) ---> instrukcja warunkowa
( a>b ? x : y ) ---> wyrażenie warunkowe
Możliwe, że jeszcze nie poznałeś jedynego trzyargumentowego operatora ?: ale tworzysz nim wyrażenie, które jako całość przyjmie wartość x lub y, zależnie od warunku (a>b).
---------------------------------------------------------------------------------------------
Oczywiście int P = 10 + 8; --> operacja inicjalizacji, instrukcja, (10 + 8) - wyrażenie o wartości 18,
(P = 10 + 8) ---> jako całość, jest to również kolejne wyrażenie o wartości 18.
---------------------------------------------------------------------------------------------
Pętla for: for( int i = 0; i < 10; i++), na czynniki pierwsze:
for() --> instrukcja
int i = 0; --> instrukcja (definicja + inicjalizacja, czytaj: utworzenie i wpisanie wartości startowej)
i = 0 --> operacja przypisania
( i = 0 ) --> wyrażenie o wartości 0. Dałem w nawias, aby lepiej to sobie zobrazować.
i < 10 --> operacja porównania
( i < 10 ) --> wyrażenie o jakiejś wartości (true lub false)
i++ --> operacja postinkrementacji
i++ --> i teraz mozna debatować, czy to jest wyrażenie? Otóż jest, ale specyficzne. Wyrażenie to przyjmuje wartość, lecz dopiero przy opuszczaniu tej instrukcji. Czyli:
int i = 0;
i++; <--- to jest wyrażenie, lecz ma wartość 0! O tym należy pamiętać.
i < 10; --> zakończone średnikiem. Czy jest to instrukcja? Czysto teoretycznie tak, ale ktoś kiedyś powiedział: "Chcąc poznawać coraz to dokładniejsze szczegóły, w pewnym momencie okaże się, że wszystko jest brzydkie.". Po prostu nie zawsze należy siłą starać się nazwać najdrobniejszy element.
---------------------------------------------------------------------------------------------
Kto pyta i uzyskuje odpowiedź, czuje się pewniej w tym co robi :-)
Pozdrawiam.