一元运算符和++或 –

为什么在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运算符的优先级高于一元运算符。