const_cast là toán tử ép kiểu (casting operator) dùng để bỏ thuộc tính const của biến/con trỏ, cho phép sửa đổi giá trị ban đầu được khai báo const.
Cú pháp
const_cast<type>(expression)
Ví dụ cơ bản
#include <iostream>
using namespace std;
int main() {
const int a = 20;
const int* b = &a;
cout << "old value is " << *b << "\n";
int* c = const_cast<int*>(b);
*c = 40;
cout << "new value is " << *b;
return 0;
}
Kết quả
old value is 20 new value is 40
Giải thích: b là con trỏ const trỏ đến a const. Không thể sửa *b trực tiếp. const_cast<int*>(b) bỏ const, tạo c non-const trỏ cùng địa chỉ. Sửa *c làm thay đổi a.
⚠️ Cảnh báo
Sửa đổi đối tượng thực sự là const (không phải chỉ con trỏ const) gây undefined behavior. Chỉ dùng khi chắc chắn đối tượng gốc không phải const.
Ứng dụng khác: Truyền const cho hàm non-const
int change(int* p2) { return (*p2 * 10); }
int main() {
const int num = 100;
const int* p = #
int* p1 = const_cast<int*>(p);
cout << change(p1); // 1000
return 0;
}
Hàm change nhận int* non-const. Dùng const_cast để truyền con trỏ const vào.