C++程式中,i++和++i的效能是否有所差異?
i++和++i的效果相同。唯一差別在於i++先對i進行賦值,再對i進行加1,而++i則是先對i加1,再對i進行賦值。我們可以在下面的程式碼中看出兩者的差異。
示例程式碼
#include<iostream> using namespace std; int main() { int x = 3, y, z; y = x++; z = ++x; cout << x << ", " << y << ", " << z; return 0; }
輸出
5, 3, 5
現在的問題是,既然兩個函式執行相同的任務,但是執行順序不同,那麼是否會存在效能問題,或者兩者是一樣的?
嗯,這兩個操作的效能很大程度上取決於底層架構。其中一個是對儲存在記憶體中的值進行自增,這意味著馮·諾依曼瓶頸基本上是兩種情況的限制因素。
不過我們可以說++i比i++略快。在進行自增之前,i++會取得i的一個區域性副本,而++i則不會。有時,如果可能,一些編譯器會最佳化程式碼。但這種最佳化並不總是有效的,或者並非所有編譯器都會這樣做。
Advertisement