[英]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
如果的類型i
是Index
的定義如下:
在我的腦海中,我無法想象使用預增量變量作為左值可能導致的任何有用的陳述。 在C ++中,由於運算符重載的存在,我可以。 由於這種限制,您是否有一個特定的例子,說明您在C中無法做到的事情?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.