Rumah >pembangunan bahagian belakang >C++ >Mengapakah `typeid.name()` GCC Mengembalikan Nama Tidak Boleh Dibaca dan Bagaimana Saya Boleh Membetulkannya?
GCC's typeid.name() Keanehan
Fungsi typeid.name() sering digunakan untuk mendapatkan maklumat tentang jenis pembolehubah atau ungkapan. Walau bagaimanapun, apabila menyusun dengan GCC, telah diperhatikan bahawa fungsi ini mengembalikan aksara yang kelihatan tidak masuk akal dan bukannya nama jenis yang tidak dicacatkan yang dijangkakan. Tingkah laku ini berbeza dengan penyusun lain seperti Visual C , yang memberikan gambaran yang lebih jelas.
Punca Disebalik Percanggahan
Percanggahan terletak pada pelaksanaan typeid. name(), yang ditakrifkan oleh pelaksanaan pengkompil. GCC, misalnya, mengembalikan nama yang dihias, yang merangkumi maklumat tambahan tentang jenis, seperti nama dan tandatangan pembina dan pemusnah.
Menyahlemahkan Nama yang Dihiasi
Untuk mendapatkan nama jenis yang lebih mudah dibaca daripada rentetan yang dihias, anda boleh menggunakan alatan seperti c filt atau __cxa_demangle. Alat ini "menghancurkan" nama yang dihias, mengalih keluar maklumat tambahan dan meninggalkan anda dengan nama jenis yang tidak rosak.
Contoh: Demangling dengan penapisan c
#include <iostream> #include <typeinfo> using namespace std; struct Blah {}; int main() { cout << c++filt::demangle(typeid(Blah).name()) << endl; return 0; }
Apabila anda menyusun dan melaksanakan kod yang diubah suai ini, anda akan mendapat yang diingini output:
struct Blah
Kesimpulan
Walaupun fungsi typeid.name() GCC pada mulanya mengembalikan nama jenis yang dihias, ia adalah mungkin untuk demangle untuk mendapatkan jenis unmalled nama menggunakan alatan seperti c filt atau __cxa_demangle. Dengan memahami sifat yang ditentukan pelaksanaan typeid.name(), anda boleh mendapatkan semula maklumat jenis yang diingini dalam kod C anda dengan berkesan.
Atas ialah kandungan terperinci Mengapakah `typeid.name()` GCC Mengembalikan Nama Tidak Boleh Dibaca dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!