for迴圈中的++i和i++(摘抄總結)
阿新 • • 發佈:2019-02-14
摘要: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;