Consider a code excerpt below:
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);
How to cast correctly into ULONG_PTR* using C+开发者_如何学Python+ style cast?
p.s. it's platform dependent code.
I guess it would be const_cast<ULONG_PTR*>(reinterpret_cast<const ULONG_PTR*>(&info)).
From Effective C++, 3rd. Ed., Item 27:
const_castis typically used to cast away the constness of objects. It is the only C++-style cast that can do this.reinterpret_castis 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.
And for the sake of completeness, the remaining two C++ casts are:
dynamic_castis 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_castcan be used to force implicit conversions (e.g., non-constobject toconstobject (as in Item 3),inttodouble, 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 fromconstto non-constobjects. (Onlyconst_castcan do that.)
加载中,请稍侯......
精彩评论