0
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=a.f()++;。如果我将其更改为b=++a.f();我得到相同的错误,但如果我将其更改为b=a.f()+1;它工作正常。当编译器有前缀++或后缀++操作数要做时,它会怎么想?a++(或++a)和(比方说 int 类型a=a+1在哪里)有什么区别?a

4

2 回答 2

4

结果f()暂时的。你不能增加一个临时整数......

于 2013-06-09T20:56:28.057 回答
4

这样想:

expression++

是的简写

expression = expression + 1

不是简写

expression + 1

现在用你的函数调用扩展它:

a.f() = a.f() + 1

上述内容没有意义,除非f()返回您可以分配的内容,例如引用。因此表达式无效。

但是,如果您的函数通过引用返回,则可以进行赋值:

int& f() {
    return x;
}

现在这两个表达式a.f()++a.f() = a.f()+1很有意义:它在x里面a被修改了,所以你的程序可以编译。

于 2013-06-09T20:58:42.747 回答