首頁 >後端開發 >C++ >如何從 typeid.name() 解開 GCC 的損壞類型名稱?

如何從 typeid.name() 解開 GCC 的損壞類型名稱?

Barbara Streisand
Barbara Streisand原創
2024-11-26 06:04:09623瀏覽

How Can I Demangle GCC's Mangled Type Names from typeid.name()?

在GCC 中使用typeid.name() 分解未修飾的型別名稱

使用typeid.name() 擷取型別名稱時,不同的編譯器可能會提供不同的結果。例如,眾所周知,GCC 會傳回「損壞」的名稱,而 Visual C 則提供未損壞的名稱。

這種差異源自於 typeid.name() 的回傳值是實現定義的事實。根據 C 標準,每個實作都可以自行決定如何表示類型名稱。

對於 GCC,typeid.name() 傳回的名稱帶有稱為「損壞名稱」的附加資訊。 」此格式包括用於內部編譯器目的的裝飾。要獲得未損壞的類型名稱,您可以使用c filt 命令或__cxa_demangle 函數。

c filt 4Blah

輸出:struct Blah

__cxa_demangle("4Blah",空指針,空指針, nullptr)

輸出:Blah

利用這些工具,您可以對修飾的類型名稱進行分解並檢索所需的未分解表示。

以上是如何從 typeid.name() 解開 GCC 的損壞類型名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn