Warum gibt der Ausdruck a = a + b - (b = a) eine Sequenzpunktwarnung in c ++ aus?

Es folgt der Testcode:

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

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

Wenn Sie dies kompilieren, erhalten Sie die folgende Warnung:

> $ 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]

Warum kann die Operation undefiniert sein?

Nach meinem Verständnis zunächst der Unterausdruck(b = a) sollte aufgrund der höheren Priorität von () ausgewertet werden, sodass b = a gesetzt wird. Da dann '+' und '-' die gleiche Priorität haben, würde der Ausdruck linksassoziativ ausgewertet. Somit,a + b sollte als nächstes ausgewertet werden, und schließlich das Ergebnis von(b = a) sollte von subtrahiert werdena + b. Ich kann keine sehenSequenzpunktregel hier verletzt werden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage