赋值或条件绑定更强

Does assignment or conditional bind stronger?

本文关键字:绑定 条件 赋值      更新时间:2023-10-16

我刚刚偶然发现了以下两条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

注意规则是如何相互递归的:条件表达式赋值表达式配表达式条件表达式

这对于运算符优先级意味着什么?通常,强绑定运算符的非终端出现在弱绑定运算符规则的右侧,但不是相反,对吧?以下是困扰我的问题,特别是:

一方面,a = b ? c : d意味着a = (b ? c : d),表明?:结合更强。

另一方面,a ? b : c = d意味着a ? b : (c = d),表明=结合更强。

传统意义上的运算符优先级的概念在这里根本不适用吗?为什么?

?:=具有相同的运算符优先级,并且从右向左绑定。

请参阅cppreference。