簡體   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