![](/img/trans.png)
[英]How to correctly cast a pointer-to-struct to pointer-to-other-struct in modern C++ when calling legacy C API?
[英]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項所述),將int
為double
,等等)。 它也可以被用於執行許多這樣的轉換的相反的(例如,void*
指針類型指針,指針到基地指針到導出),盡管它不能從投const
到非const
對象。 (只有const_cast
可以做到這一點。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.