我有以下代码:
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)
是否正确?
答案 0 :(得分:1)
是的,reinterpret_cast是正确的选择。通常,从类型*到void *的转换应该是隐式的,而从void *到类型*的转换应该使用static_cast完成。但在你的情况下,你正在从类型**转换为void **,这使你别无选择,只能使用reinterpret_cast。然而,它仍然比c风格的演员更“安全”,因为你无法抛弃常数。
答案 1 :(得分:1)
我认为您可能必须使用reinterpret_cast,因为CoCreateInstance函数的最后一个参数用于输出目的。 请看这个链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
因此,无论您是进行C样式转换还是使用reinterpret_cast,该函数只是想在堆中创建对象后将指针值放入变量“psl”中。