fre*_*low 8 c++ syntax grammar operators operator-precedence
我偶然发现了以下一对C++语法规则:
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
Run Code Online (Sandbox Code Playgroud)
注意规则是如何相互递归的:条件表达式是指赋值表达式(规则2),赋值表达式是指条件表达式(规则1).
这对于运算符优先级意味着什么?通常,强绑定运算符的非终端出现在弱绑定运算符的规则的右侧,但不是相反,对吧?这是困扰我的,特别是:
一方面,a = b ? c : d
意味着a = (b ? c : d)
,暗示?:
更强大.
另一方面,a ? b : c = d
手段a ? b : (c = d)
,暗示=
结合更强.
传统意义上的运算符优先级概念在这里不适用吗?为什么?