Ich bin gerade auf das folgende Paar C ++ - Grammatikregeln gestoßen:
%Vor%Beachten Sie, dass die Regeln gegenseitig rekursiv sind: Bedingter Ausdruck bezieht sich auf Zuweisungsausdruck (Regel 2), und Zuweisungsausdruck verweist darauf zu Bedingungsausdruck (Regel 1).
Was bedeutet dies in Bezug auf die Vorrangstellung des Betreibers? Normalerweise findet das Nicht-Terminal für den stärker bindenden Operator auf der rechten Seite der Regeln für den schwächeren Bindeoperator statt, aber nicht umgekehrt, oder? Hier ist was mich verwirrt, speziell:
Auf der einen Seite bedeutet a = b ? c : d
a = (b ? c : d)
, was darauf hindeutet, dass ?:
stärker bindet.
Auf der anderen Seite bedeutet a ? b : c = d
a ? b : (c = d)
, was darauf hindeutet, dass =
stärker bindet.
Trifft das Konzept der Operatorenpräzedenz im herkömmlichen Sinn einfach nicht zu? Warum?
?:
und =
haben die gleiche Operatorpriorität und binden von rechts nach links.
Siehe cppreference .
Tags und Links c++ syntax grammar operators operator-precedence