赋值或条件绑定更强吗?
Does assignment or conditional bind stronger?
我刚刚偶然发现了以下一对 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
注意规则是如何相互递归的:条件表达式指的是赋值表达式(规则2),赋值表达式指的是条件表达式(规则1)。
这对运算符优先级意味着什么?通常,强绑定运算符的非终结符出现在弱绑定运算符规则的右侧,但反之则不然,对吗?这是让我困惑的地方,具体来说:
一方面,a = b ? c : d
表示a = (b ? c : d)
,表明?:
绑定更强。
另一方面,a ? b : c = d
表示 a ? b : (c = d)
,表明 =
绑定更强。
传统意义上的运算符优先级的概念在这里根本不适用吗?为什么?
?:
和 =
具有相同的运算符优先级,并且从右到左绑定。
参见cppreference。
我刚刚偶然发现了以下一对 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
注意规则是如何相互递归的:条件表达式指的是赋值表达式(规则2),赋值表达式指的是条件表达式(规则1)。
这对运算符优先级意味着什么?通常,强绑定运算符的非终结符出现在弱绑定运算符规则的右侧,但反之则不然,对吗?这是让我困惑的地方,具体来说:
一方面,a = b ? c : d
表示a = (b ? c : d)
,表明?:
绑定更强。
另一方面,a ? b : c = d
表示 a ? b : (c = d)
,表明 =
绑定更强。
传统意义上的运算符优先级的概念在这里根本不适用吗?为什么?
?:
和 =
具有相同的运算符优先级,并且从右到左绑定。
参见cppreference。