c++前加与后加

左值与右值

  • 左值:占据内存中某个地址的对象

  • 右值:没有占据内存中某个地址的对象,即:只存在于计算过程中的某个临时寄存器中

  • 左值能够进行赋值操作,而右值不能,因为右值没有与之对应的内存存储数据

  • 例如:

    int foo(){return 2;}//#func1
    int& foo(){int* a=new int;return *a;}//#func2
    int main(){
        foo()=2;
    }
    

    当调用的函数是#func1时,由于#func1返回的值是一个临时值,不会占据内存某个地址,因此是一个右值,所以无法进行赋值操作,编译器会报错。而#func2则相反

前加与后加

  • 前加:变量先进行加1运算,再返回加1运算后的左值

  • 后加:将变量取一个副本,自己调用前加进行加1运算,并将副本作为右值返回,即:后加返回的是未进行加1运算的左值

  • 例如:

    ++i=3;//正确
    i++=3;//错误,不能对右值进行赋值操作