GCC 中的Typeid.name() 行為與分解技術
使用typeid 運算子時,開發人員會遇到typeid 輸出的差異。 name() 取決於所使用的編譯器。本文探討了 GCC 中發生這種情況的原因以及如何解決列印未損壞的類型名稱的問題。
GCC 與Visual C :型別名稱顯示
在範例中假設,GCC(版本4.4.4)在呼叫typeid(Blah).name() 時傳回“4Blah”,而Visual C 2008 顯示“struct廢話。”這種差異是由於GCC 返回修飾類型名稱造成的。
GCC 的修飾型別名稱
typeid 運算子的實作並沒有統一定義。對於 GCC,它會傳回一個修飾類型名稱,其中包括類型的大小和對齊方式等附加資訊。
Unmangling Decorated Names
擷取未修飾的名稱輸入名稱,使用者必須對修飾名稱進行整理。這可以使用各種工具來完成:
應用分解
應用分解g++ -fno-rtti -no-pie -o main main.cpp ./main | c++filt在執行GC以下指令來分解修飾名稱「4Blah」:此指令將列印「struct Blah」作為分解後的型別名稱。將 __cxa_demangle() 函數整合到程式碼中也是一種以程式設計方式對修飾名稱進行分解的選項。
以上是為什麼 `typeid.name()` 在 GCC 中產生不同的輸出以及如何解析它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!