Chúng ta dùng const qualifier** để khai báo biến là hằng số – tức là không thể thay đổi giá trị sau khi đã khởi tạo. Việc dùng const mang lại lợi ích lớn.
Lợi ích chính
- An toàn: Ngăn chặn sửa đổi vô ý (ví dụ: hằng số PI, cấu hình hệ thống).
- Tối ưu hóa: Biên dịch có thể đặt đối tượng
constvào bộ nhớ chỉ đọc (read-only memory). Nếu địa chỉ của đối tượngconstkhông bao giờ được lấy, nó có thể không được lưu trữ כלל. - Tự tài liệu hóa: Rõ ràng ý định thiết kế – biến này không thay đổi.
- Overloading: Cho phép nạp chồng hàm dựa trên
const(const vs non-const member function).
Ví dụ
#include <iostream>
using namespace std;
int main() {
const int x = 10;
x = 12; // LỖI BIÊN DỊCH: assignment of read-only variable 'x'
return 0;
}
Const với con trỏ ( quan trọng )
| Khai báo | Ý nghĩa |
|---|---|
const int* p hoặc int const* p |
Con trỏ tới int const – không thể sửa đổi giá trị qua con trỏ |
int* const p |
Con trỏ const tới int – không thể thay đổi địa chỉ con trỏ trỏ đến |
const int* const p |
Cả hai: con trỏ const tới int const |
Best practice
Mặc định khai báo const cho mọi biến/hàm tham số không cần sửa đổi. Chỉ bỏ const khi thực sự cần thay đổi giá trị.