簡體   English   中英

按值返回時需要左值作為增量操作數

[英]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使完美的意義:它是xa是被修改,所以你的程序將匯編。

暫無
暫無

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

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