如果我們有,如果有這樣的變量聲明聲明:爲什麼if語句和變量聲明比循環中的加法更快?
#include <iostream>
#include <ctime>
using namespace std;
int main() {
int res = 0;
clock_t begin = clock();
for(int i=0; i<500500000; i++) {
if(i%2 == 0) {int fooa; fooa = i;}
if(i%2 == 0) {int foob; foob = i;}
if(i%2 == 0) {int fooc; fooc = i;}
}
clock_t end = clock();
double elapsed_secs = double(end - begin)/CLOCKS_PER_SEC;
cout << elapsed_secs << endl;
return 0;
}
結果是:
1.44
Process returned 0 (0x0) execution time : 1.463 s
Press any key to continue.
但是,如果它是:
#include <iostream>
#include <ctime>
using namespace std;
int main() {
int res = 0;
clock_t begin = clock();
for(int i=0; i<500500000; i++) {
res++;
res--;
res++;
}
clock_t end = clock();
double elapsed_secs = double(end - begin)/CLOCKS_PER_SEC;
cout << elapsed_secs << endl;
return 0;
}
結果是:
3.098
Process returned 0 (0x0) execution time : 3.115 s
Press any key to continue.
爲什麼添加或減去運算比使用變量聲明的if語句花費更多時間?
因爲具有變量聲明的if語句幾乎沒有任何內容,因此它不存在。 E:儘管我現在看到它,但是這些循環都沒有做任何事情,所以爲了獲得任何時間,你必須在優化被抑制的情況下進行編譯。這使得結果毫無意義,但這也意味着我的初步猜測不適用。 – harold
檢查您的彙編代碼以查看優化的效果。 – MikeCAT
[這裏是一個例子,說明如何在C中使用前後的遞增器](https://www.quora.com/How-do-the-increment-and-decrement-operators-work-in-C) – user82395214