c 中前置 與後置 的區別

2022-07-06 15:18:10 字數 1433 閱讀 7025

自增(++)與自減(--)是我們經常會用到的運算子,然而很多情況下我們並不注意要用前置還是後置。本文就自增(++),討論前置++與後置++的不同點,**兩者的用途(自減運算子同理)。

一般情況下在while迴圈中我們會有如下用法:

while

(...)

此處無論是前置自增還是後置自增,效果都類似於 i += 1,因為這是單獨的運算,沒有與其他的表示式參與運算。

int i = 1

;

int num1 = ++i + 1

;

int j = 1

;

int num2 = j++ + 1

; cout

<< num1

<< num2 << endl;//num2 = 2;

前置運算子之所以叫前置運算子,不是沒有道理的。在參與表示式計算中,有前置運算子的效果會先行清算,也就是說,上述**中的i會先自增然後再+1賦值給num1。即num1 = i(=2) + 1;

與之對應的,後置運算子的效果則在一行的運算結束後再清算,也就是說j會+1賦值給num2,然後再自增。即num2 = j(=1) + 1;j += 1;

由於上一條中前置運算子與後置運算子的運算特性,前置運算子返回結果是左值(可以在賦值符號左側),後置運算子的返回結果是右值(只能出現在賦值符號右側)。後置運算子為了達到這一效果,必須儲存變數未自增前的值,以便於後續返回,因此總體來說後置運算子會有額外的開銷,並不等價於 += 1。廢話不多說,直接上測試**:

size_t n =1e3;

clock_t duration = 0

; clock_t start = 0, finish = 0

; vector

vec(n);

for (int i = 0; i < n; ++i)

//for(int i = n; i > 0; --i){}

finish =clock();

duration += finish -start;

}cout

<< "

總執行時間為:

"<< duration << "毫秒"

//for (int i = n; i > 0; i--) {}

finish =clock();

duration += finish -start;

}cout

<< "

總執行時間為:

"<< duration << "毫秒"

<< endl;//後置運算子 1234ms

具體運算時間肯定會有一定出入。但是通過以上測試可以明顯發現,在遍歷中運用自增或者自減時,前置運算會比後置運算快不少。

前置加加與後置加加的區別

基本概念 如下所示 include intmain include intmain 如果只看最終變數的結果的話,前置 與後置 所能達到的效果是一樣的,因為前置 與後置 最終都會使得變數的結果 1,但是,前置 與後置 針對於內建資料型別和非內建資料型別的效率是不一樣的,如 針對內建資料型別 針對內建資...

前置 和後置 的區別

includeusing namespace std class int int const int operator int int operator private int m i ostream operator ostream os,const int i 可以使用 a而此時不能使用a 後置...

前置 和後置 的區別

a表示取a的位址,增加它的內容,然後把值放在暫存器中 a 表示取a的位址,把它的值裝入暫存器,然後增加記憶體中的a的值 前置 和後置 有4點不同 返回型別不同 形參不同 不同 效率不同 1 返回型別 前置 的返回型別是 後置 的返回型別const值。這意味著,前置 返回的是左值 可以被修改,也就是說...