Sử dụng dàn diễn viên tĩnh có lẽ sẽ dẫn đến một cái gì đó như thế này:
// This does not prevent a possible type overflow
const char char_max = -1;
int i = 48;
char c = (i & char_max);
Để ngăn chặn tràn loại có thể bạn có thể làm điều này:
const char char_max = (char)(((unsigned char) char(-1))/2);
int i = 128;
char c = (i & char_max); // Would always result in positive signed values.
đâu reinterpret_cast có lẽ chỉ trực tiếp chuyển đổi sang char , không có bất kỳ sự an toàn nào. -> Không bao giờ sử dụng reinterpret_cast nếu bạn cũng có thể sử dụng static_cast. Nếu bạn đang truyền giữa các lớp, static_cast cũng sẽ đảm bảo rằng hai loại đó phù hợp (đối tượng là một dẫn xuất của loại diễn viên).
Nếu đối tượng của bạn là loại đa hình và bạn không biết nó là loại nào, bạn nên sử dụng dynamic_cast sẽ thực hiện kiểm tra kiểu lúc chạy và trả về nullptr nếu các loại không khớp.
NẾU bạn cần const_cast, bạn có thể đã làm điều gì đó sai và nên suy nghĩ về các lựa chọn thay thế có thể để sửa chữa tính chính xác của const trong mã của bạn.
Bạn cũng có thể làm 'char c = i;' và không lo lắng về việc diễn viên nào diễn ra. Tất nhiên, nếu bạn làm điều đó bạn sẽ chạy afoul của "đúc ở khắp mọi nơi" folks người nhấn mạnh rằng cảnh báo trình biên dịch được biến thành lỗi và sau đó cố định bất cứ nơi nào chúng xảy ra. –