i++和++i區別


i++ 與 ++i 的主要區別有兩個:
  1、 i++ 返回原來的值,++i 返回加1后的值。
  2、 i++ 不能作為左值,而++i 可以。

  // 前綴形式:
  int& int::operator++() //這里返回的是一個引用形式,就是說函數返回值也可以作為一個左值使用
   {//函數本身無參,意味着是在自身空間內增加1的
    *this += 1; // 增加
    return *this; // 取回值
  }
   //后綴形式:
  const int int::operator++(int) //函數返回值是一個非左值型的,與前綴形式的差別所在。
   {//函數帶參,說明有另外的空間開辟
     int oldValue = *this; // 取回值
    ++(*this); // 增加
    return oldValue; // 返回被取回的值
  }
 
  左值是對應內存中有確定存儲地址的對象的表達式的值,而右值是所有不是左值的表達式的值。
  一般來說,左值是可以放到賦值符號左邊的變量。但能否被賦值不是區分左值與右值的依據。比如,C++的const左值是不可賦值的;而作為臨時對象的右值可能允許被賦值。
 左值與右值的根本區別在於是否允許取地址&運算符獲得對應的內存地址。
  比如:
  int i = 0;
  int *p1 = &(++i);//正確
  int *p2 = &(i++);//錯誤
 
  ++i = 1;//正確
  i++ = 1;//錯誤
 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM