#define 是前置處理器文字替換,無型別安全、無作用域、除錯困難(錯誤訊息顯示替換後的字面值而非宏名稱)。
// ❌ #define 缺點
#define MAX_SIZE 1024
// 錯誤訊息顯示 1024,難以追蹤;每次使用產生副本;無型別檢查
// ✅ const 常數
const int MaxSize = 1024; // 有型別、有作用域、單一記憶體位址、除錯顯示 MaxSize
// ✅ enum hack(舊編譯器不支援 static const 整數初始化時)
class GamePlayer {
enum { NumTurns = 5 }; // 編譯期常數,不佔記憶體
int scores[NumTurns];
};
// ❌ 危險宏:參數副作用、運算子優先級陷阱
#define MAX(a,b) ((a) > (b) ? (a) : (b))
int a = 5, b = 0;
MAX(++a, b); // a 增加兩次!
MAX(++a, b+10); // a 增加一次!(b+10 > a)
// ✅ inline 函數模板:型別安全、無副作用、編譯器優化
template <typename T>
inline const T& max(const T& a, const T& b) {
return a > b ? a : b;
}
inline 建議編譯器展開函數本體,避免呼叫開銷。const T& 傳遞,避免複製並保護原值。const(或 enum 用於類別內整數常數)。inline 函數模板。