Tôi không chắc chắn nếu nó đã được hỏi trước đó, nhưng phải có được tôi tin. Hãy xem xét một dòng đơn giản cho sự khởi đầu của câu hỏi:Làm cách nào để static_cast có thể truyền int sang char chứ không phải reinterpret_cast?
int a ;
char b = reinterpret_cast<char> (a);
Tôi hiểu reinterpret_cast
giải thích các mẫu bit của loại x as type y, ofcouse nó không nên làm việc do kích thước không phù hợp và thực sự nó không.
Bây giờ xem xét việc này một mã số:
int a ;
char b = static_cast<char> (a);
này hoạt động! . Bây giờ câu hỏi của tôi là nó có thể hoạt động như thế nào? Tôi có nghĩa là trình biên dịch tắt các bit? . Tôi chắc chắn là sizeof(char) < sizeof(int)
. Nếu điều đó, reinterpret_cast
cũng nên hoạt động bằng cùng một kỹ thuật?
* "... và' reinterpret_cast' không làm điều đó "*. mà một phần của spec nói rằng? – Nawaz
@Nawaz, phần xác định chuyển đổi được cho phép bởi 'reinterpret_cast', hiển nhiên, bạn mong đợi nó nói ở đâu? [expr.reinterpret.cast] "Chuyển đổi có thể được thực hiện một cách rõ ràng bằng cách sử dụng' reinterpret_cast' được liệt kê dưới đây. ** No chuyển đổi khác có thể được thực hiện rõ ràng bằng cách sử dụng 'reinterpret_cast'. **" –
Mặc dù bề rộng có vẻ như tên của nó, ' reinterpret_cast' khá hạn chế. Như @JonathanWakely chỉ ra, có một danh sách những điều nó có thể làm (về cơ bản những thứ liên quan đến con trỏ và tài liệu tham khảo) và không có gì khác được cho phép. 5.2.10 [expr.reinterpret.cast]. Không giống như một diễn viên kiểu C ... –