繁体   English   中英

如何在C ++中正确转换结构

[英]How to cast correctly a struct in C++

考虑下面的代码摘录:

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);

如何使用C ++样式转换正确转换为ULONG_PTR *?

ps是平台相关的代码。

我猜应该是const_cast<ULONG_PTR*>(reinterpret_cast<const ULONG_PTR*>(&info))

来自有效C ++,第3版。 编,第27项:

  • const_cast通常用于丢弃对象的常量性。 这是唯一可以做到这一点的C ++风格的转换。
  • reinterpret_cast适用于产生依赖于实现(即,不可移植)的结果的低级转换,例如,将指针转换为int。 在低级代码之外,此类转换应该很少见。

为了完整起见,其余两个C ++强制转换是:

  • dynamic_cast主要用于执行“安全向下转换”,即确定对象在继承层次结构中是否具有特定类型。 它是唯一无法使用旧式语法执行的转换。 它也是唯一一个可能会花费大量运行时间的转换。
  • static_cast可用于强制进行隐式转换(例如,将非const对象转换为const对象(如第3项所述),将intdouble ,等等)。 它也可以被用于执行许多这样的转换的相反的(例如, void*指针类型指针,指针到基地指针到导出),尽管它不能从投const到非const对象。 (只有const_cast可以做到这一点。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM