[英]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.