1. 程式人生 > >for迴圈中的++i和i++(摘抄總結)

for迴圈中的++i和i++(摘抄總結)

摘要:for迴圈中使用++i和i++的區別

我們都知道,在for迴圈中,使用++i有更好的效能。原因是++i返回的是i+1後的本身值,而i++返回的是i+1之前的臨時變數,後者要有臨時變數的操作,所以前者效率更高。它們的實現如下:

  // 字首形式:
int& int::operator++() //這裡返回的是一個引用形式,就是說函式返回值也可以作為一個左值使用
{//函式本身無參,意味著是在自身空間內增加1的
  *this += 1;  // 增加
  return *this;  // 取回值
}

//字尾形式:
const int int::operator++(int) //函式返回值是一個非左值型的,與字首形式的差別所在。
{//函式帶參,說明有另外的空間開闢
  int oldValue = *this;  // 取回值
  ++(*this);  // 增加
  return oldValue;  // 返回被取回的值
}

在這裡,兩種操作的返回值是不一樣的,一個是i,一個是臨時變數。i可以使用&地址符,而臨時變數則不可以。所以++i是左值,而i++是右值。

int i = 0;
int *p1 = &(++i); //正確
int *p2 = &(i++); //錯誤

++i = 1; //正確
i++ = 5; //錯誤

雖然,++i和i++在效率上有差別,但它們在for迴圈中所體現的作用是一致的,並不會造成迴圈次數的差異,原因在於在for迴圈中,對++i和i++是一個獨立的語句,它們並不是判斷語句的左運算元。

//字首形式    
  ++i;
  i!=n;
  
//字尾形式
  i++;
  i!=n;