Учитывая following code (и тот факт, что VirtualAlloc()
returns a void*
):Правильный способ литья типов указателей
BYTE* pbNext = reinterpret_cast<BYTE*>(
VirtualAlloc(NULL, cbAlloc, MEM_COMMIT, PAGE_READWRITE));
reinterpret_cast
почему выбран вместо static_cast
?
Раньше я думал, что reinterpret_cast
в порядке, например. (например, DWORD_PTR
), но для отливки от void*
до BYTE*
не является static_cast
ОК?
Есть ли какие-либо (тонкие?) Различия в данном конкретном случае, или они являются как действительными, так и действительными указателями?
Есть ли стандарт C++ для этого случая, предлагая путь вместо другого?
На первом месте я бы не стал предполагать, что разработчики Microsoft следуют «де-факто хорошей практике». 'static_cast' здесь просто отлично. – 2013-03-22 20:05:35
'static_cast' должно быть предпочтительным, но некоторые люди предпочитают' reinterpret_cast', потому что имя показывает, что вы делаете (вы переинтерпретируете бит-шаблон). –
(Во всяком случае, +1, наслаждайтесь значком 'nice question'!) – 2013-03-22 20:29:10