Więc wiem, że C++ ma Priorytet operatorów i żeC/C++ Math Porządek działania
int x = ++i + i++;
jest nieokreślona, ponieważ pre ++ i pisać ++ są na tym samym poziomie, a zatem nie ma sposobu, aby powiedzieć, które z nich będzie najpierw się wyliczy. Ale zastanawiałem się, czy nie jest niezdefiniowana. Powodem, dla którego pytam, jest to, że istnieje wiele sposobów, aby na to spojrzeć (1/2)/3 LUB 1/(2/3). Zgaduję, że jest to niezdefiniowane zachowanie, ale chciałbym to potwierdzić.
Nie, nie jest niezdefiniowany. Jest (jeden podzielony przez dwa) podzielone przez trzy. Innymi słowy, to zwykła wyrażenie matematyczne. –
Myślę, że twoje myślenie jest tutaj trochę mgliste, a to przenika twoje myślenie o drugim. Pierwszy naprawdę sprowadza się do porządku oceny argumentów dla niezdefiniowanej funkcji. Oznacza to, że jeśli myślisz o tym jako 'operator + (++ i, i ++)', to przeskakuje na ciebie. –
C++ (i większość innych języków programowania) mają zdefiniowaną kolejność pierwszeństwa zapożyczoną z matematyki. Nie patrzysz na wyrażenie na wiele sposobów; operacje matematyczne mają hierarchię. Można jednak zmienić kolejność operacji za pomocą (dobrze umieszczonego) nawiasu. –