[英]Why are functions returning references with prefix inc/dec operators are lvalue expressions but not with postfix inc/dec operators
為什么返回左值引用以及前綴遞增/遞減運算符的函數是左值表達式,而返回左值引用以及后綴遞增/遞減運算符的函數不是左值表達式?
C++ 底漆,Lippman 等人。 5/e 提到:
返回左值引用的函數以及賦值、下標、取消引用和前綴遞增/遞減運算符都是返回左值的表達式的示例。 我們可以將左值引用綁定到任何這些表達式的結果。
返回非引用類型的函數以及算術、關系、按位和后綴遞增/遞減運算符都產生右值。 我們不能將左值引用綁定到這些表達式,但我們可以將左值引用綁定到 const 或將右值引用綁定到這些表達式。*
我會嘗試用我從@YSC 那里得到的一些提示來回答這個問題。 不確定正確性。 社區請幫助查看此答案。
在前綴的情況下:
返回值(這是一個引用)可以遞增(通過使用重載的前綴 ++ 運算符),它本身返回對相同 object 的引用,可以分配,在某種意義上,object 在整個前綴 inc/ 中保持身份dec 操作,因此它產生一個左值表達式。
在后綴的情況下:
返回值和以前一樣是一個引用,但現在必須制作 object 的副本(通過引用返回),因為有一個 post inc/dec 運算符。
情況與案例類似:
int i;
i+1 = j
i+1 不是左值表達式。 i+1 沒有標識(內存分配),因此不能用作左值表達式。
為什么返回左值引用以及前綴遞增/遞減運算符的函數是左值表達式,而返回左值引用以及后綴遞增/遞減運算符的函數不是左值表達式?
因為標准是這樣說的。
來自價值類別的文檔:
以下表達式是左值表達式:
- function 調用或重載的運算符表達式,其返回類型為左值引用
++a
和--a
,內置的預增和預減表達式;
相似地,
以下表達式是純右值表達式:
- function 調用或重載的運算符表達式,其返回類型為非引用
a++
和a--
,內置的后增量和后減表達式
a + b
、a % b
、a & b
、a << b
和所有其他內置算術表達式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.