前置++和后置++

int main()

{

    //1.判断错误,并说明原因

    int a=10;

    int b=10;

 

    a++=10;//相当于(a++) = 10,a++返回的是个临时量,临时量是隐式的常变量,不能修改

    cout<<&a<<" "<<&a++<<endl;// 相当于&(a++),对临时量进行取地址,&只能对一个左值或者函数指示符(函数名)

 

    ++a=11;//没问题,相当于a = 11

    cout<<&a<<" "<<&++a<<endl;//没问题

 

    cout<<(a++)+(a++)+(a++)<<endl;//a = 10, 加法从右向左结合, 12+11+10

    理解错误,a++是在本语句结束完了才对a本身进行加1,

汇编上是 将a+a+a赋值给b,然后重复将a放入寄存器,寄存器加1,将寄存器的值写回给a

 

    cout<<(++a)+(++a)+(++a)<<endl;//a = 10 13+12+11

 

    cout<<a+++++b<<endl;// ((a++)++) + b 错误,a++返回一个临时量,对临时量不能进行++操作

    cout<<++a+++b<<endl;// (++(a++)) + b 错误, a++返回一个临时量,对临时量不能就行++操作

    cout<<(++a)+++b<<endl;//((++a)++) + b 正确

 

    return 0;

}

 

操作符优先级:后缀自增 > 前缀自增 > 取地址 > 加法 > 左移位 > 赋值

 

总结:

  1. 后置自增operator++(int),返回的是const类型的临时量
  2. 前置自增operator++(),返回的是自增变量自身的引用

使用上,++对变量的修改在语句结束前先不考虑,语句结束后再进行加1操作

 

posted @ 2018-03-21 11:28  hanhuihanhui  阅读(200)  评论(0编辑  收藏  举报