请考虑以下代码摘录:
typedef struct tagTHREADNAME_INFO {
DWORD dwType;
LPCTSTR szName;
DWORD dwThreadID;
DWORD dwFlags;
} THREADNAME_INFO;
const THREADNAME_INFO info = { 0x1000, threadName, CurrentId(), 0};
::RaiseException(kVCThreadNameException, 0,
sizeof(info) / sizeof(ULONG_PTR),
(ULONG_PTR*)&info);
Run Code Online (Sandbox Code Playgroud)
如何使用C++样式转换正确地转换为ULONG_PTR*?
ps它是平台相关的代码.
我猜是的const_cast<ULONG_PTR*>(reinterpret_cast<const ULONG_PTR*>(&info)).
从Effective C++,第3版.编辑,第27项:
const_cast通常用于抛弃对象的常量.它是唯一能够做到这一点的C++风格的演员.reinterpret_cast适用于产生依赖于实现的(即,不可移植的)结果的低级转换,例如,转换指向int的指针.在低级代码之外,此类强制转换应该很少见.
为了完整起见,剩下的两个C++演员是:
dynamic_cast主要用于执行"安全向下转换",即确定对象是否属于继承层次结构中的特定类型.它是唯一使用旧式语法无法执行的强制转换.它也是唯一可能具有显着运行时成本的强制转换.static_cast可用于强制隐式转换(例如,非const对象到const对象(如第3项),inttodouble等).它也可用于执行许多此类转换的反转(例如,void*指向类型指针的指针,指向指向派生的指针),尽管它不能const转换为非const对象.(只能const_cast这样做.)
| 归档时间: |
|
| 查看次数: |
6410 次 |
| 最近记录: |