Kusterek napisał
No wlasnie nie, wynikiem nawiasu jest j lub i. I jak już mówiłem w takim zapisie inkrementacja następuje zanim zmienna będzie określona, co jest błędem.
No właśnie nie ;d
Inkrementacja nastepuje wtedy kiedy jest wpisana w kodzie, tylko jej wynik jest wpisany do zmiennej albo od razu, albo pod koniec wyrażenia.
Przykładowo jeśli wyrażenie wygląda tak:
Kod:
int a = ++(b ? c : d);
To mamy takie kroki:
1. Obliczenie wyrażenia w nawiasie, zwraca ono c lub d.
2. Inkrementacja c lub d (zależnie od wyniku w nawiasie).
3. Wpisanie już zwiększonej wartości do a.
A gdyby wyglądał tak:
Kod:
int a = (b ? c : d)++;
1. Obliczenie wyrażenia w nawiasie, zwraca ono c lub d.
2. Wpisanie do a wyniku nawiasu (czyli niezwiększonego c lub d).
3. Inkrementacja wyniku nawiasu (czyli c lub d, natomiast a zostaje ze starą wartością).
VS jest wrażliwy i wywala się nawet na:
Kod:
cin >> n;
while(n>0){
//dosomething
}
bo w momencie kompilacji nie potrafi okreslić wartości
Oczywiście że VS to przepuści :>
Zakładki