Uwzględniając following code (oraz fakt, że VirtualAlloc()
returns a void*
):Prawidłowe sposobem odlewania typy wskaźnika
BYTE* pbNext = reinterpret_cast<BYTE*>(
VirtualAlloc(NULL, cbAlloc, MEM_COMMIT, PAGE_READWRITE));
reinterpret_cast
dlaczego wybrano zamiast static_cast
?
Kiedyś sądziłem, że reinterpret_cast
jest OK dla np. wskaźniki odlewania do iz typów całkowitych (jak np. DWORD_PTR
), ale rzutowanie z void*
na BYTE*
, nie jest prawidłowe?
Czy są jakieś (subtelne?) Różnice w tym konkretnym przypadku, czy są one tylko oboma prawidłowymi rzutami wskaźnika?
Czy standard C++ preferuje ten przypadek, sugerując sposób zamiast drugiego?
Po pierwsze, nie zakładam, że programiści Microsoftu przestrzegają "dobrych praktyk de facto". "static_cast" jest w porządku tutaj. –
'static_cast' powinno być preferowane, ale niektórzy wolą' reinterpret_cast', ponieważ nazwa pokazuje, co robisz (reinterpretujesz wzór bitowy). –
(W każdym razie, +1, życzę miłej odznaki!) –