Pytanie z interview

0
a = 10;
std::cout << ++a << ++a

ponoć może wypisać 11 11 i ponoć to wina optymalizacji.
Jeżeli to prawda to wygląda to na bug w kompilatorze, bo w programie działąjącym w 1 wątku nie powinno być takich efektów. Co innego jeżeli chodzi o programy wielowątkowe. Czy ktoś mógłby powiedzieć czy naprawde taki wynik jest możliwy?

0

Wynik może być też inny - kolejność ewaluacji argumentów jest w C++ niezdefiniowana. Możliwe opcje:

  • kompilator raz wylicza ++a, i podstawia dwa razy, druga inkrementacja będzie niewidoczna na wyjściu (11, 11), najgłupszy przypadek ale standard języka tego nie zabrania;
  • lecą dwie inkrementacje, wynik drugiej podstawiany dwukrotnie (12, 12), chyba najczęściej spotykany;
  • ewaluacja od lewej do prawej (11, 12);
  • ewaluacja od prawej do lewej (12, 11);

Witamy w prawdziwym świecie C++... takich konstrukcji powinno się unikać.

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