繁体   English   中英

一元运算符和++或 -

[英]Unary operators and ++ or --

为什么在C规范中只将前缀增量和减量运算符概括为一元运算符?

事实上,post fi x递增和递减运算符被汇总到Postfix运算符部分。

我没有看到差异。 两者都在一个操作数上运行。

REWRITTEN :正如@Lundin指出的那样,我想我错误地阅读了这个规范。 一个更好的答案似乎是标准的这一部分中使用的名称没有多大意义。

当然,后缀和前缀增量/减量都和另一个一样。 这就是他们的使用方式。 它们具有不同优先级的事实意味着它们被放在不同的组中,并且这些组具有稍微偏离的历史名称。

您指的是C标准,其中一个版本的草稿就在这里

postfix inc / decrement与前缀inc / decrement不同的部分是因为标准的这一部分遵循语法,并且为了消除歧义,这些运算符处于语法的不同级别:

unary-expression: 
  postfix-expression
  ++ unary-expression
  -- unary-expression
  ...


postfix-expression:
  primary-expression
  ...
  postfix-expression ++
  postfix-expression --

这允许诸如++ E ++类的表达式(虽然这样的表达式永远不会有效)被明确地解析为++(E++) )。

@Pascal Cuoq回答了为什么他们在不同的群体中:这是因为他们有不同的优先权,没有其他原因。 它与实际上是一元运算符还是二元运算符几乎没有关系。

C使用操作符组的混淆名称的原因很可能是这个经典但不正确的表:

K&R第2版第48页。 在此输入图像描述

这张桌子应该归咎于世界上许多邪恶。 K&R最初将“所有一切”列为一个运营商集团。 但当然这是正确的:对于后缀++没有意义 - 与前缀运算符组合在一起。

由于C是标准化的,委员会可能意识到这个表没有任何意义,因此他们组建了更多的组。 在K&R表中的两个顶级组中,他们做了三个。 一个用于主要表达的组()包括那里的普通括号() ),一组用于后缀,一组仍称为一元,可能是由于历史原因。 后者的一个更好的名称无疑是前缀运算符,但C标准并不完全清楚是合理的。

我想这只是标准结构的问题。 C11标准有一个专门用于后缀运算符的部分,因此它们不与其余的中缀和前缀运算符分类。 在数学上,它们当然是一元的。

首先,Postfix运算符是左关联的,而一元运算符是右关联的。

其次,Postfix运算符的优先级高于一元运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM