Właśnie natknąłem poniższej pary zasad gramatyki C++:Czy przypisanie lub warunkowe powiązanie jest silniejsze?
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
^^^^^^^^^^^^^^^^^^^^^
assignment-expression:
conditional-expression
^^^^^^^^^^^^^^^^^^^^^^
unary-expression assignment-operator assignment-expression
throw assignment-expression_opt
Zauważ, że reguły są wzajemnie rekurencyjne: warunkowego ekspresji dotyczy przypisania ekspresji (zasada 2) i assignment- wyrażenie odnosi się do warunkowego wyrażenia (zasada 1).
Co to oznacza w odniesieniu do pierwszeństwa operatora? Zwykle nieterminowy dla silniejszego operatora występuje po prawej stronie zasad dla słabszego operatora, ale nie na odwrót, prawda? Oto, co mnie zastanawia, konkretnie:
Z jednej strony a = b ? c : d
oznacza a = (b ? c : d)
, co sugeruje, że ?:
wiąże się silniej.
Z drugiej strony a ? b : c = d
oznacza a ? b : (c = d)
, co sugeruje, że =
wiąże się silniej.
Czy pojęcie operatora pierwszeństwo w tradycyjnym sensie po prostu nie stosuje się tutaj? Czemu?
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B "Tabela pierwszeństwa, choć w większości wystarczająca, nie może rozwiązać kilku szczegółów .W szczególności należy zauważyć, że operator potrójny pozwala dowolnemu dowolnemu wyrażeniu jako jego środkowi operand, pomimo tego, że jest wymieniony jako mający wyższy priorytet niż operatory przypisania i przecinania, a zatem a, b, c: d jest interpretowany jako? (b, c): d, a nie jako pozbawiony znaczenia (a? b), (c : d). Zauważ również, że natychmiastowy, nieprywatyzowany wynik wyrażenia C cast nie może być operandem sizeof. " Ale to odnosi się do innego przypadku skrajnego. –
Wikipedia również zauważa, że w 'C' jest opisana jako' logiczne-OR-expression? wyrażenie: wyrażenie warunkowe', inne niż C++ –
@MooingDuck Och, ta przecinek jest interesująca! – fredoverflow