读书人

(a++)+=2;有关问题

发布时间: 2012-09-14 11:53:44 作者: rapoo

(a++)+=2;问题
(a++)+=2;
为什么不对?

[解决办法]
a++;后置递增操作符返回的是临时变量,递加后不改变自身的值。所以调用(++a)+=2;后a的值不变
改为(++a)+=2;即可。
[解决办法]
为什么不能作为左值,但是没有一个人把原因说出来!
因为a++本质上是一个操作符函数调用,所以a++其实相当于是返回了一个临时变量,这个临时变量在
int b = a++;
这条语句之后就变会被析构,原因是以后的语句都不可能再访问到这块内存,编译器对于不能再访问到的内存会及时做析构操作。
但并非所有的函数返回值都不能作为左值,有些返回值是可以作为左值的,只有返回的临时变量不能作为左值。
下面这个函数
int& GetMyNum()
{
static int nMyNum = 0;
return nMyNum;
}
GetMyNum() += 2;
这条语句编译绝对正确;

读书人网 >C++

热点推荐