轉自個人博客
1. 避免創建過多中間變量
過多的中間變量不利于代碼的可讀性,還會增加內存的使用,而且可能導致額外的計算開銷。
將用于同一種情況的變量統一管理,可以使用一種通用的變量來代替多個變量。
2. 函數中習慣使用引用傳參而不是返回值賦值
常有的一種情況是,需要使用函數進行計算或處理數據,并通過其返回值獲得結果。
對于簡單的計算或處理,直接使用返回值返回結果無可厚非,方便快捷也影響不了多少運行效率。
但對于復雜處理,或對大數據量的變量進行處理時,就要習慣使用引用傳參進行賦值并獲得處理結果。引用傳參后函數能直接對原變量進行操作,能減少不必要的內存拷貝,提高運行效率。而且,可以使用返回值實現其他功能,比如用一個bool值返回操作是否成功。
#include <iostream> int calculation(const int &x, const int &y) { return x + y; // 簡單運算
} bool complexCalculation(const int &x, const int &y, int &result) {// 復雜運算result = .....;return true;// 對于失敗情況返回false
}int main() { int a = 5, b = 10, result; result = calculation(a, b); // 直接獲取值if(complexCalculation(a, b, result)){ // 引用傳參std::cout << "Calculation successful" << result;}return 0;
}
3. 習慣使用const修飾參數
始終記得對需要的變量或函數參數使用const關鍵字修飾是一個很好的習慣,比如上面的bool complexCalculation(const int &x, const int &y, int &result);
。
使用const變量能避免無意中修改變量或參數值,尤其是后期維護或升級代碼時,有時候就會忘記以前寫的代碼的特定使用場景而為了圖方便直接修改。在需要的地方使用const修飾也有利于提高代碼可讀性和安全性。
4. 全局變量在使用的時候再分配內存
一般來說,全局變量會在程序啟動時分配內存,對于指針,一些人習慣性會在構造函數中分配需要的內存,而很多時候,這是不必要的,應該謹慎考慮變量的使用情況,在實際第一次需要的時候再分配內存。這樣能避免不必要的內存占用,也能避免一些內存泄露的情況。
class myClass {
public:explicit myClass(){m_myArray = nullptr;}~myClass(){delete[] m_myArray; };void myFunc(){m_myArray = new int[5]; // 在此處第一次需要時再分配內存for (int i = 0; i < 5; ++i) { globalArray[i] = i * 10; std::cout << globalArray[i] << std::endl; } // 釋放內存也要再不需要的時候進行釋放}protected:int *m_myArray;
};
5. 減少函數調用的次數
程序中跳轉執行的代價很高,不利于運行效率,而很多人忽視了一點是,常用的函數也是一種跳轉執行的情況。
每一次函數調用都帶來一定的開銷,在頻繁調用的情況下,合理管理這個開銷就顯得格外重要。
一般我們都習慣使用函數能提高代碼的可讀性,但有些時候這樣就會降低代碼的運行效率,有句話叫“效率高的代碼可讀性都不高”,雖然我們不必做到極致的高效率,但也要謹慎權衡效率和可讀性。
而要避免使用不必要的函數可以考慮通過內聯函數或者將常用常量作為全局變量來減少函數調用。
#include <iostream> inline int square(int x) { // 內聯函數 return x * x;
} int main() { for (int i = 0; i < 5; ++i) { // 減少函數調用的次數 std::cout << "Square of " << i << " is " << square(i) << std::endl; } return 0;
}