Бросок от Пустоты* для ВВОДА* использующий бросок стиля C++: static_cast или reinterpret_cast

Таким образом, если Ваше преобразование из Пустоты* для Ввода* или из Типа* для Освобождения* должно Вы использовать:

void func(void *p)
{
    Params *params = static_cast<Params*>(p);
}

или

void func(void *p)
{
    Params *params = reinterpret_cast<Params*>(p);
}

Мне static_cast кажется более корректным, но я видел обоих используемых для той же цели. Кроме того, делает направление вопроса преобразования. т.е. если я все еще использую static_cast для:

_beginthread(func,0,static_cast<void*>(params)

Я считал другие вопросы на кастинге стиля C++, но я все еще не уверен, что корректный путь для этого сценария (я думаю, что это - static_cast),

7
задан Robben_Ford_Fan_boy 17 June 2010 в 18:36
поделиться

3 ответа

Вам следует использовать static_cast, чтобы указатель правильно манипулировал и указывал в правильном месте. Однако вы должны делать это только в том случае, если вы использовали статическое приведение для преобразования указателя на void * в первую очередь. В противном случае вы должны переинтерпретировать_каст точно так же, как исходный указатель (без баз и т.п.).

7
ответ дан 7 December 2019 в 01:16
поделиться

Всегда следует избегать reinterpret_cast , и в этом случае static_cast выполнит задание. При преобразовании в указатель void * не требуется никакого приведения.

0
ответ дан 7 December 2019 в 01:16
поделиться

Используйте для этого static_cast с обеих сторон и сохраните reinterpret_cast на тот случай, когда никакая другая операция приведения не будет работать. Следующие темы SO предоставляют больше контекста и подробностей:

Какие формулировки в стандарте C ++ допускают static_cast (malloc (N)); для работы?

Когда использовать reinterpret_cast?

3
ответ дан 7 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: