Xét following code (và thực tế là VirtualAlloc()
returns a void*
):Đúng cách đúc các loại con trỏ
BYTE* pbNext = reinterpret_cast<BYTE*>(
VirtualAlloc(NULL, cbAlloc, MEM_COMMIT, PAGE_READWRITE));
tại sao reinterpret_cast
chọn thay vì static_cast
?
Tôi từng nghĩ rằng reinterpret_cast
là OK cho ví dụ: chuyển con trỏ đến và từ các loại số nguyên (ví dụ: DWORD_PTR
), nhưng để truyền từ một số void*
đến một số BYTE*
, không phải là static_cast
OK?
Có bất kỳ sự khác biệt (tinh tế?) Nào trong trường hợp cụ thể này hay chỉ là cả hai khuôn mẫu con trỏ hợp lệ?
Chuẩn C++ có ưu tiên cho trường hợp này hay không, gợi ý cách thay thế cho trường hợp này?
Ở vị trí đầu tiên, tôi sẽ không cho rằng các nhà phát triển Microsoft tuân theo "thực tiễn tốt trên thực tế". 'static_cast' là tốt ở đây. –
'static_cast' nên được ưu tiên, nhưng một số người thích' reinterpret_cast' vì tên hiển thị những gì bạn đang làm (bạn đang diễn giải lại mẫu bit). –
(Dù sao, +1, hãy tận hưởng huy hiệu 'câu hỏi hay '!) –