Tak jak w tytule
szybko please a[i]=i++;
w petli to ub czy nie?
Tak jak w tytule
szybko please a[i]=i++;
w petli to ub czy nie?
Jest, nie ma nigdzie sequence pointa, a nie można w ten sposób się odnosić do modyfikowanej wartośći.
(Wołam @Endrju do weryfikacji i ładniejszego opisania.)
czy zatem : a[i++] = i to tez UB ?
Zarówno a[i]=i++
jak i a[i++] = i
to undefined behavior (W C i C++).
value computation ("obliczenie wartości") wyrażenia i
(czy to jako samo i
czy w a[i]
) oraz side effects ("efekty uboczne") wyrażenia i++
(czy to samo i++
czy w a[i++]
) są unsequenced. To oznacza, że nie wiadomo co stanie się najpierw - obliczanie wartości czy efekty uboczne. Jeżeli nie wiadomo co się stanie i dotyczy to jednego obiektu to mamy do czynienia z zachowaniem niezdefiniowanym.
Sprawa komplikuje się w przypadku typów zdefiniowanych przez użytkownika i przeciążonych operatorów (ale to tylko dla C++).