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,让我们说)?
答案 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
被修改,因此您的程序将被编译。