簡體   English   中英

為什么預增量運算符在C中給出rvalue?

[英]Why pre-increment operator gives rvalue in C?

在C ++中,預增量運算符給出左值,因為返回了遞增的對象本身,而不是副本。 但在C中,它給出了右值。 為什么?

C沒有參考。 在C ++ ++i返回對i (左值)的引用,而在C中它返回一個副本(遞增)。

C99 6.5.3.1/2

pre fi x ++運算符的操作數的值遞增。 結果是增量后操作數的新值 表達式++ Eis等價於(E + = 1)。

''value of an expression'' <=> rvalue

但是由於歷史原因,我認為“引用不屬於C”可能是一個可能的原因。

C99在腳注(第6.3.2.1節)中說,

名稱“左值”最初來自賦值表達式E1 = E2,其中左操作數E1需要是(可修改的)左值。 它可能更好地被視為表示對象的“定位器值”。 有時被稱為''rvalue'的東西在本國際標准中被描述為''表達的價值''

希望能解釋為什么++i在C中,返回rvalue。


至於C ++,我會說它取決於增加的對象。 如果對象的類型是某種用戶定義的類型,那么它可能總是返回左值。 這意味着,你可以寫i++++++++++++++i如果的類型iIndex的定義如下:

重新加載未定義的行為和序列點

在我的腦海中,我無法想象使用預增量變量作為左值可能導致的任何有用的陳述。 在C ++中,由於運算符重載的存在,我可以。 由於這種限制,您是否有一個特定的例子,說明您在C中無法做到的事情?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM