首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++ 程式設計實戰技巧:new/delete、inline、多載、參考傳遞

     編輯:VC 教學

技巧一:使用 new/delete 取代 malloc/free


// 配置單一物件並初始化
int* p = new int(100);

// 配置陣列
int* arr = new int[10]; // 預設初始化 (非 POD 不保證歸零)
delete[] arr;           // 必須配對使用 delete[]

// 非 POD 類別:自動呼叫建構/解構函數
class Widget { public: Widget(int x); ~Widget(); };
Widget* w = new Widget(42); // 建構函數帶參數
delete w;

優勢:型別安全 (無需轉型)、內建 sizeof、支援初始化、可多載/置換全域/類別專屬 operator new。

技巧二:inline 函數取代巨集


// 巨集缺陷:abs(i++) 展開為 ((i++) < 0 ? -(i++) : (i++)) → i 遞增兩次
#define ABS(x) ((x) < 0 ? -(x) : (x))

// inline 函數:型別安全、單次求值、除錯可設中斷點
inline int abs(int x) { return x < 0 ? -x : x; }

// 類別內定義隱含 inline
class Math {
    static inline int max(int a, int b) { return a > b ? a : b; }
};

注意:inline 僅是建議,編譯器可能拒絕 (函數過大、遞迴、虛函數)。過度內聯導致指令快取未命中、程式碼膨脹。

技巧三:函數多載簡化介面


// C 風格:名稱編碼型別資訊
void PutHz(char* str);
void PutHzAt(int x, int y, char* str);

// C++ 多載:同名語意分組,編譯器依參數簽章解析
void PutHz(char* str);           // 當前位置
void PutHz(int x, int y, char* str); // 指定座標
void PutHz(const std::string& str);  // 支援 string

限制:僅靠回傳型別不同**無法**構成多載。預設參數與多載結合時需避免二義性。

技巧四:參考傳遞取代指標


// C 風格:呼叫端需取址,函數內解參考
void Add(int* a) { (*a)++; }
int x = 0; Add(&x);

// C++ 參考:語法透明,不可為 null,別名語意清晰
void Add(int& a) { a++; }
int x = 0; Add(x); // 呼叫如同傳值,實為傳址

// const 參考:避免大型物件拷貝,承諾不修改
void Print(const BigObject& obj);

核心差異:參考初始化後不可重新繫結、不可為 null、無指標運算,編譯器強制語意安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved