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.