Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa #define và const trong C++

#define là chỉ thị tiền xử lý (preprocessor directive); preprocessor thay thế macro bằng nội dung của nó trước khi compiler thấy code. Hiểu như tìm và thay tự động trong mã nguồn.

const khai báo một biến thực sự trong ngôn ngữ, dùng như biến thật: lấy địa chỉ (&var), truyền tham chiếu, ép kiểu, chuyển đổi, v.v.

So sánh chi tiết

Đặc điểm #define const
Giai đoạn xử lý Tiền xử lý (preprocessing) Biên dịch (compilation)
Kiểm tra kiểu Không (text substitution) Có (type safety)
Phạm vi (scope) Không có (global từ điểm định nghĩa) Có (block scope, namespace scope)
Lấy địa chỉ Không thể (&MACRO lỗi) Có thể (&constVar)
Debugger Không thấy tên macro Thấy tên biến, giá trị
Bộ nhớ Không cấp phát (text replace) Có thể cấp phát (trừ khi tối ưu hóa bỏ)
Overloading/Template Không tham gia Tham gia bình thường

Hiệu năng

Với tối ưu hóa bật (-O2, -O3), cả hai thường tạo ra code máy giống nhau (constant propagation, inlining). Không tối ưu thì const có thể tốn bộ nhớ, #define không.

Khuyên dùng

Luôn ưu tiên const (hoặc constexpr C++11) thay vì #define cho hằng số. Chỉ dùng #define cho: include guard, conditional compilation, hoặc macro phức tạp không thể dùng const/constexpr.