我偶然发现了以下两条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),这意味着=绑定得更强。
在传统意义上,运算符优先的概念在这里根本不适用吗?为什么?
发布于 2015-03-27 22:09:53
?:和=具有相同的运算符优先级,并从右向左绑定.
见cppreference。
https://stackoverflow.com/questions/29310916
复制相似问题