Dlaczego wyrażenie a = a + b - (b = a) podaje ostrzeżenie o sekwencji w c ++?

Oto kod testu:

int main()
{
    int a = 3;
    int b = 4;
    a = a + b - (b = a); 

    cout << "a :" << a << " " << "b :" << b << "\n";    
    return 0;
}

Kompilacja daje następujące ostrzeżenie:

> $ g++ -Wall -o test test.cpp test.cpp: In function ‘int main()’:
> test.cpp:11:21: warning: operation on ‘b’ may be undefined
> [-Wsequence-point]

Dlaczego operacja może być niezdefiniowana?

Zgodnie z moim zrozumieniem najpierw podwyrażenie(b = a) należy ocenić z powodu wyższego priorytetu (), dlatego ustawienie b = a. Następnie, ponieważ „+” i „-” mają ten sam priorytet, wyrażenie zostanie ocenione lewostronnie. A zatem,a + b powinien być oceniany dalej, a na koniec wynik(b = a) należy odjąć oda + b. Nie widzę żadnegoreguła punktu sekwencyjnego naruszone tutaj.

questionAnswers(4)

yourAnswerToTheQuestion