Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `typeid.name()` GCC Mengembalikan Nama-nama yang Dicemari Daripada Nama Jenis Biasa?
Nama Jenis Kusut GCC: Menyahmistifikasikan 'typeid.name()' Conundrum
Apabila menggunakan fungsi 'typeid.name()' dengan GCC, pengguna mungkin terkejut dengan rentetan pelik yang dipulangkan. Tidak seperti pengkompil lain yang menyediakan nama kelas atau struct yang tidak terkontaminasi, GCC mengeluarkan nama yang dihias penuh dengan potensi kekeliruan.
Menyelesaikan Masalah
Pertimbangkan kod C berikut:
#include <iostream> #include <typeinfo> using namespace std; struct Blah {}; int main() { cout << typeid(Blah).name() << endl; return 0; }
Menyusun kod ini dengan GCC 4.4.4 menghasilkan masalah yang membingungkan hasil:
4Blah
Sebaliknya, Visual C 2008 akan kembali:
struct Blah
Menyingkap Misteri
Sebab percanggahan ini terletak pada sifat 'typeid.name()' yang ditentukan oleh pelaksanaan. Pelaksanaan boleh memilih untuk mengembalikan rentetan yang tidak serupa untuk jenis yang berbeza atau bahkan rentetan yang sama untuk jenis yang berbeza.
Nama Berhias GCC
GCC, mengikut reka bentuk, mengembalikan nama yang dihias untuk taip maklumat. Nama yang dihias ini ialah rentetan kompleks yang merangkumi pelbagai butiran tentang jenis itu, termasuk namanya dan hujah templat yang berkaitan.
Menyahkan Nama Berhias
Untuk memahami GCC nama yang dihias, seseorang boleh menggunakan perintah 'c filt' atau fungsi '__cxa_demangle'. Alat ini membolehkan demangling nama yang dihias, mendedahkan kelas asas atau nama struct yang tidak hancur.
Kesimpulan
Sedangkan tingkah laku 'typeid.name()' mungkin berbeza-beza merentasi penyusun, adalah penting untuk mengenali sifat pulangannya yang ditentukan oleh pelaksanaan. Dalam kes GCC, ia mengembalikan nama yang dihias, yang memerlukan alat khusus untuk demangle untuk kebolehbacaan.
Atas ialah kandungan terperinci Mengapakah `typeid.name()` GCC Mengembalikan Nama-nama yang Dicemari Daripada Nama Jenis Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!