簡體   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