簡體   English   中英

以下代碼如何工作?

[英]How does the following code work?

    #define TYPE_CHECK(T, S)                                     \
    while (false) {                                              \
      *(static_cast<T* volatile*>(0)) = static_cast<S*>(0);      \
    }

我正在閱讀谷歌v8的代碼,發現上面的宏進行類型檢查。

但是,我不明白為什么會這樣。 雖然(假)永遠不會被執行,對吧? 有人可以解釋這些線嗎? 謝謝

相當奇特的黑客 - 宏的目的似乎是檢查類型S是否可分配給類型T (即,是子類)。 如果不是,則從S*T*的指針將產生編譯器錯誤。 while (false)阻止代碼實際產生任何其他影響。

是的,但編譯器仍然對循環內容執行語法和語義檢查。 所以,如果事情是錯誤的(即從隱式類型轉換S*T*是非法的,這恰好如果T既不是S ,也不是一個基類的S ),編譯失敗。 否則,生成的機器代碼的質量不會受到影響,因為優化器將檢測到無法訪問的代碼並以靜默方式將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM