64,670
社区成员
发帖
与我相关
我的任务
分享
int a=4;
cout<<(++a)+=(a++)<<endl; //结果为10
cout<<a<<endl; //结果为11
帮忙分析下啊,谢谢了。
wchar_t ch = L'A';
std::wstring s;
s.append(ch);
//前缀形式,如++a
int &int::operator++()
{
*this+=1;
return *this;
}
//后缀形式,如a++,看到返回值为const int 了吧
const int int::operator++(int)
{
int oldvalue=*this;
++(*this);
return oldvalue;
}
#include <iostream>
using namespace std;
void main()
{
int a=4;
cout<<((++a)+=(a++))<<endl; //结果为10
cout<<a<<endl; //结果为11
system("pause");
}
纠正一下,需要加一个括号,不然编译都通不过。
首先说第一个cout后面的内容吧,压栈顺序从右向左
(++a)+=(a++)和(++a)=(++a)+(a++)等价,那么先a++,调用后缀++这个运算符重载函数返回副本4,a值变为5,然后(++a),调用前缀++这个运算符重载函数返回a,a为6。
然后输出赋值语句6+4,结果为10就好理解了。
然后再++a,就变成11了。
再说附带的一些东西,++a可以作为左值,a++不行。