当按值返回时,左值需要作为增量操作数

时间:2013-06-09 20:55:16

标签: c++

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)和a=a+1之间有什么区别(其中a的类型为int,让我们说)?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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被修改,因此您的程序将被编译。