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、nullptr、 nullptr)
出力: なんと
これらのツールを利用すると、装飾された型名を分解し、必要な分解されていない表現を取得できます。
以上がtypeid.name() から GCC のマングルされた型名をデマングルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。