考虑下面的代码摘录:
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*?
附注它是依赖于平台的代码。
最佳答案
我想应该是 const_cast<ULONG_PTR*>(reinterpret_cast<const ULONG_PTR*>(&info))
.
来自 Effective C++,第 3 期。编辑,第 27 项:
const_cast
is typically used to cast away the constness of objects. It is the only C++-style cast that can do this.reinterpret_cast
is intended for low-level casts that yield implementation-dependent (i.e., unportable) results, e.g., casting a pointer to an int. Such casts should be rare outside low-level code.
为了完整起见,剩下的两个 C++ 转换是:
dynamic_cast
is primarily used to perform "safe downcasting," i.e., to determine whether an object is of a particular type in an inheritance hierarchy. It is the only cast that cannot be performed using the old-style syntax. It is also the only cast that may have a significant runtime cost.static_cast
can be used to force implicit conversions (e.g., non-const
object toconst
object (as in Item 3),int
todouble
, etc.). It can also be used to perform the reverse of many such conversions (e.g.,void*
pointers to typed pointers, pointer-to-base to pointer-to-derived), though it cannot cast fromconst
to non-const
objects. (Onlyconst_cast
can do that.)
关于c++ - 如何在 C++ 中正确转换结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2938414/