關於一般使用:
情景1:單獨使用的時候
int i=0,j=0;
i++;
j++;
NSLog(@"i:%d,j:%d",i,j);
結果:i:1,j:1
結論:在這種情況下,兩者的效果都是 i=i+1
情景2:i=++i;
int a,i = 0;
a = ++i;
NSLog(@"%d",a);
結果:1
結論:此時的操作是 (1)i=i+1;(2)a=i
情景3:i=i++;
int a,i = 0;
a = i++; //好分裂,誰這麼寫代碼,誰sx
NSLog(@"%d",a);
結果:0
結論:此時的操作是(1)a=i;(2)i=i+1;
關於效率
討論:他們的效率問題(標準情況下),會有編譯器針對性優化,然後就沒差了。
這裏有關於c++的討論。其他的語言在不同的編譯器下,不一定相同。
我們通常在寫for循環 的時候,要實現變量 i 的自增 1 ;往往會在i++ 和++i中隨便挑一種寫,對於i++和++i的理解,我們往往停留在返回的值的不同,其實i++與++i在實現效率上也有一定的不同(不考慮編譯器優化的原因)。
++i的實現效率更高
解釋如下:
i++ (在C++中) 在實現的時候,系統會產生一個 local object class INT的臨時變量 用於存儲原有的數據供返回值用;
++i 的實現方式
INT INT::operator++()
{
*this = *this +1;
return *this;
}
i++的實現方式
const INT INT::operator++(int)
{
INT oldvalue = *this;
*this = *this+1;
return oldvalue;
}
所以從效率上來說 ++i 比 i++來的更有效率。
++i更高效
說明:
1、在不考慮編譯器優化的條件下,前綴(++i)比後綴(i++)要少一步開闢臨時變量的操作,所以前綴效率更高。
2、對於內置數據類型,由於編譯器優化的原因,前綴和後綴的效率沒什麼差別。
例如:對於 int 型變量,編譯器可以優化掉開闢臨時變量這份多餘的工作。
3、對於自定義的數據類型(類),我們在使用 自增 運算符的時候,需要重載 ++ 運算符,在重載的時候,後綴要開闢一個臨時變量,所以前綴的效率要比後綴的更高。
關於效率的討論:Leo115