c 前自增 後自增操作符效率分析

2022-10-06 02:36:08 字數 1807 閱讀 4012

class integer

// i++  first s**e old value,then +1,last return old value

integer operator++(int)

private:

int value_;

};#include

#include

#include

int main()

queryperformancecounter(&stop);    

const auto interval = static_cast(stop.quadpart - start.quadpart);

const auto timespan = interval / frequency.quadpart * 1000.0; //ms

std::cout << "i++ " << sizeint << " times takes " << timespan << "ms." << std::endl;

delete testvalue;

}queryperformancecounter(&stop);    

const auto interval = static_cast(stop.quadpart - startwww.cppcns.com.quadpart);

const auto timespan = interval / frequency.quadpart * 1000.0; //ms

std::cout << "++i " << sizeint << " times takes " << timespan << "ms." << std::endl;

delete testvalue;

}queryperformancecounter(&stop);

const auto interval = static_cast(stop.quadpart - start.quadpart);

const auto timespan = interval / frequency.quadpart * 1000.0; //ms

std::cout << "iterator++ " << sizevec << " times takes " << timespan << "ms." << std::endl;

}queryperformancecounter(&stop);

const auto interval = static_cast(stop.quadpart - start.quadpart);

const auto timespan = interval / frequency.quadpart * 1000.0; //ms

std::cout << "++iterator " << sizevec << " times takes " << timespan << "ms." << std::endl;

}return 0;

}從上面的執行結果可以看出來,對int型別的測試中前自增和後自增耗費時間基本不變;而對std::vector中iterator的測試顯示,前自增所耗費的時間幾乎是後自增的一半。這是因為,在後自增的操作中,會首先生成原始物件的乙個副本,然後將副本中的值加1後返回給呼叫者,這樣一來每執行一次後自增www.cppcns.com操作,就會增加乙個物件副本,效率自然降低了。

因此可以得出結論:對於c++內建型別的自增而言,前自增、後自增的效率相差不大;對於自定義型別(類、結構體)的自增操作而言,前自增的效率幾乎比後自增大一倍。

上述試驗的迴圈**如果在release模式下會被c++編譯器優化掉,因此需要在debug模式下才能獲得預期效果,但在實際專案中大概率是不會被編譯器優化的。

自增 和自減 操作符

自增操作符和自減操作符經常要在我們自定義的類型別中使用到,而使用時經常會出現問題。現把自己在學習的過程中的 拿出來看一下,也是c primer中的例子如下 ifndef check ptr define check ptr include using namespace std class chec...

關於自增自減操作符

c c 中自增自減運算子相信是不少人的乙個困擾,這個問題也一直困擾著我,今天再次翻開書本來看了看,有了些新的體會,所以在這裡記錄下來,同時也與那些像我一樣被困擾的人分享,程式設計大牛可以繞道了,或者有什麼不對的地方請大牛們指正。以 為例,如下程式輸出結果是什麼 int a 0,j 1 a j cou...

自增和自減操作符

毫無疑問,自增 和自減 操作符為物件加1或減1操作提供了方便簡短的實現方式。程式設計中的宗旨 簡潔即美 它們有前置和後置兩種使用形式 int i 0,j j i j 1,i 1 prefix yields incremented value j i j 1,i 2 postfix yields un...