微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一元运算符的结合性

如何解决一元运算符的结合性

在树中构建一元运算符时,我通常将其绘制为父子树,例如:

-4

  (-)
   |
   |
   4

并且在树中绘制二元运算符时,它将有一个左右节点,例如:

2-4

   -
  / \
 2   4

在需要与多个运算符关联的地方对我来说很有意义,即使 = 也会有 lhs 和 rhs:

a=4

     =
    / \
   /   \
a (lv)  4 (rv)

但我真的不明白为什么一元运算符——解析树中只有一个子节点,会有结合性的概念。例如,为什么一元加号/减号是右结合的,而不仅仅是“非结合”或“无关紧要”?

这里也有一个有用的答案:https://stackoverflow.com/a/14084830/12283181。并且:

结合性规范对于一元运算符来说是多余的,只是为了完整性才显示:一元前缀运算符总是从右到左关联(sizeof ++*p is sizeof(++(*p))),一元后缀运算符总是关联从左到右(a[1][2]++ 是 ((a[1])[2])++)。请注意,关联性对于成员访问运算符是有意义的,即使它们与一元后缀运算符组合在一起:a.b++ 被解析 (a.b)++ 而不是 a.(b++)。

来源C++ Operator Precedence


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。