Typeid.name() Gelagat dalam GCC dan Teknik Demangling
Apabila menggunakan operator typeid, pembangun menghadapi perbezaan dalam output typeid. name() bergantung pada pengkompil yang digunakan. Artikel ini meneroka sebab perkara ini berlaku dalam GCC dan cara menyelesaikan isu untuk mencetak nama jenis yang tidak rosak.
GCC lwn. Visual C : Paparan Nama Jenis
Dalam contoh dengan syarat, GCC (versi 4.4.4) mengembalikan "4Blah" apabila memanggil typeid(Blah).name(), manakala Visual C 2008 memaparkan "struct Blah." Percanggahan ini disebabkan oleh pengembalian nama jenis berhias GCC.
Nama Jenis Berhias GCC
Pelaksanaan pengendali typeid tidak ditakrifkan secara seragam. Dalam kes GCC, ia mengembalikan nama jenis yang dihias, yang termasuk maklumat tambahan seperti saiz dan penjajaran jenis.
Nama Berhias yang Tidak Kusut
Untuk mendapatkan semula yang tidak kusut. taip nama, pengguna mesti menyahkan nama yang dihias. Ini boleh dicapai menggunakan pelbagai alatan:
Memohon Demangling
Dalam GCC, arahan berikut boleh dilaksanakan untuk demangle nama yang dihias "4Blah" :
g++ -fno-rtti -no-pie -o main main.cpp ./main | c++filt
Arahan ini akan mencetak "struct Blah" sebagai nama jenis demangled. Mengintegrasikan fungsi __cxa_demangle() ke dalam kod anda juga merupakan pilihan untuk menghilangkan nama yang dihias secara pemrograman.
Atas ialah kandungan terperinci Mengapa Adakah `typeid.name()` Menghasilkan Output Berbeza dalam GCC dan Bagaimana Saya Boleh Menghancurkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!