【发布时间】:2015-07-01 12:10:45
【问题描述】:
我有以下代码:
IShellLink* psl;
HRESULT hres = CoCreateInstance(
CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(LPVOID*)&psl);
已正确编译。但我需要将(LPVOID*)&psl 替换为*_cast。我必须使用什么演员表?
static_cast<LPVOID*>(&psl) 生成错误(在 MSVC 2013 中)。
使用reinterpret_cast<LPVOID*>(&psl)会正确吗?
【问题讨论】:
-
reinterpret_cast本质上等同于 C 风格的强制转换。因此,如果您打算使用它,请确保您知道自己在做什么。 -
@barakmanos 有什么办法可以用
static_cast来做这个演员吗? -
你可以做
static_cast<LPVOID*>(static_cast<LPVOID>(&psl))。 -
虽然 double-static_cast 是正确的并且会起作用,但实际上没有理由使用它。你总是可以对任何你必须 reinterpert_cast 的东西加倍 static_cast,所以你最好只是 reinterpret_cast 它。
-
@cooky451:这正是我想写下来的评论的剩余部分(“不妨只使用
reinterpret_cast”)......但我有点懒惰添加它...
标签: c++ pointers casting reinterpret-cast static-cast