将指针到指针转换为 LPVOID*
cast pointer to pointer as LPVOID*
我有以下代码:
IShellLink* psl;
HRESULT hres = CoCreateInstance(
CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(LPVOID*)&psl);
它已正确编译。但是我需要用*_cast
代替(LPVOID*)&psl
.我必须使用什么石膏?
static_cast<LPVOID*>(&psl)
生成错误(在 MSVC 2013 中)。
使用reinterpret_cast<LPVOID*>(&psl)
是正确的吗?
我认为您可能必须使用reinterpret_cast,因为CoCreateInstance函数的最后一个参数用于输出目的。请参阅此链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
因此,无论您是执行 C 样式强制转换还是使用 reinterpret_cast,该函数都只想在堆中创建对象后将指针值放入变量"psl"中。
是的,reinterpret_cast是正确的选择。通常,从类型*到void*的转换应该是隐式的,而从void*到类型*的转换应该使用static_cast来完成。但在您的情况下,您正在从类型**转换为空白**,这使您别无选择,只能使用reinterpret_cast。不过,它仍然比C型演员表"更安全",因为你不能抛弃恒定性。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 函数的返回是 LPVOID 或更好的指向列表的指针
- 将指针到指针转换为 LPVOID*