Demangling Unmalled Type Names dengan typeid.name() dalam GCC
Apabila menggunakan typeid.name() untuk mendapatkan semula nama jenis , penyusun yang berbeza mungkin memberikan hasil yang berbeza-beza. Sebagai contoh, GCC dikenali untuk mengembalikan nama "hancur", manakala Visual C menyampaikan nama yang tidak hancur.
Percanggahan ini berpunca daripada fakta bahawa nilai pulangan typeid.name() adalah ditakrifkan pelaksanaan. Mengikut piawaian C, setiap pelaksanaan mempunyai budi bicara untuk menentukan cara mewakili nama jenis.
Dalam kes GCC, nama yang dikembalikan oleh typeid.name() membawa maklumat tambahan yang dikenali sebagai "nama hancur. " Format ini termasuk hiasan yang berfungsi untuk tujuan pengkompil dalaman. Untuk mendapatkan nama jenis unmalled, anda boleh menggunakan perintah c filt atau fungsi __cxa_demangle.
c filt 4Blah
Output: struct Blah
__cxa_demangle("4Blah", nullptr, nullptr, nullptr)
Output: Blah
Dengan menggunakan alatan ini, anda boleh demangle nama jenis yang dihias dan mendapatkan semula representasi yang tidak hancur yang diingini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghancurkan Nama Jenis Mangled GCC daripada typeid.name()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!