Ưu tiên const (Effective C++, Item 2: "Prefer consts to #defines").
#define chỉ là thay thế văn bản ở giai đoạn tiền xử lý:
- Không có kiểu, không có scope — không tuân theo namespace hay class.
- Tên biến mất trước khi compiler thấy → debugger không hiển thị tên, thông báo lỗi khó truy.
const có kiểu, có scope, được compiler kiểm tra:
cpp
#define PI 3.14159 // không kiểu, không scope
const double kPi = 3.14159; // có kiểu, debug đượcHằng compile-time hiện đại dùng constexpr.
Chỉ giữ #define cho include guard và biên dịch có điều kiện.