[英]lvalue required as increment operand when returning by value
class cls
{
int x;
public:
cls(int i=-20) { x=i; }
int f() { return x; }
int main()
{
cls a(14);
int b;
b=a.f()++;
cout<<b;
return 0;
}
我在這行b=af()++;
得到“需要左值作為增量操作數” b=af()++;
。 如果我將其更改為b=++af();
我收到相同的錯誤,但是如果將其更改為b=af()+1;
工作正常。 編譯器有前綴++
或后綴++
操作數時會如何思考? a++
(或++a
)和a=a+1
(假設a
的類型為int) a=a+1
什么區別?
f()
的結果是一個臨時值 。 您不能增加一個臨時整數...
這樣想:
expression++
是的簡寫
expression = expression + 1
這不是簡寫
expression + 1
現在,使用您的函數調用將其展開:
a.f() = a.f() + 1
除非f()
返回可以分配的內容,例如引用,否則以上內容沒有任何意義。 因此,該表達式無效。
但是,如果您的函數是通過引用返回的,則可以進行賦值:
int& f() {
return x;
}
現在,這兩個表達式af()++
和af() = af()+1
使完美的意義:它是x
中a
是被修改,所以你的程序將匯編。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.