Я много читал о приведении C++ и начинаю запутываться, потому что всегда использовал приведение в стиле C.
Я читал, что приведения в стиле C следует избегать в C++ и что reinterpret_cast очень и очень опасен и не должен использоваться всякий раз, когда есть альтернатива. В отличие от того, чтобы не использовать reinterpret_cast, я много раз видел, как он использовался в MSDN в их примере кода. Это заставляет меня задать свой первый вопрос: когда можно использовать reinterpret_cast?
Например:
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_CREATE:
{
LPCREATESTRUCT lpCreateStruct = reinterpret_cast<LPCREATESTRUCT>(lParam);
return 0;
}
}
...
}
Если это не нормально, то как мне привести значение LPARAM к указателю, используя только статическое, динамическое и/или константное приведение?
Также: если reinterpret_cast не является переносимым, как мне переписать его, чтобы он был переносимым (для хорошей практики)