Rumah > pembangunan bahagian belakang > C++ > Mengapakah pembina untuk kelas tanpa kelas asas maya kelihatan diduakan dalam kod yang disusun GCC?

Mengapakah pembina untuk kelas tanpa kelas asas maya kelihatan diduakan dalam kod yang disusun GCC?

Susan Sarandon
Lepaskan: 2024-11-16 16:01:03
asal
242 orang telah melayarinya

Why do constructors for classes without virtual base classes appear duplicated in GCC-compiled code?

Pancaran Dwi Simbol Pembina

Memahami Isu

Dalam kod yang disusun GCC, pembina untuk kelas tanpa kelas asas maya mungkin muncul pendua dalam perpustakaan penyenaraian, menimbulkan persoalan tentang sebab di sebalik tingkah laku ini. Untuk menghuraikannya, Itanium C ABI mentakrifkan satu set konvensyen penamaan untuk simbol C, termasuk pembina.

Penghuraian ABI

Mari kita periksa nama-nama pembina yang rosak ini:

  • _Z3fooEv: Pembina untuk Thing::foo()
  • _ZN5ThingC1Ei: Complete object constructor for Thing(int)
  • _ZN5ThingC2Ei: Base object constructor for Thing(int)
  • _ZN5Thingte Object constructor: Complete C1Ev Thing()
  • _ZN5ThingC2Ev: Pembina objek asas untuk Thing()

Seperti yang anda lihat, pembina dibezakan oleh C1 (pembina objek lengkap) dan C2 (pembina objek asas ) akhiran.

Yang Berbeza Pembina

Dualiti ini berpunca daripada sokongan polimorfisme, walaupun ia tidak diperlukan secara ketat dalam kes ini. Pembina objek lengkap juga memulakan kelas asas maya, manakala pembina objek asas memulakan ahli data dan kelas asas bukan maya.

Berbilang Definisi

Walaupun berbilang entri dalam penyenaraian perpustakaan, pembina pendua ini melakukannya tidak menyebabkan ralat "takrifan berbilang simbol __". Ini adalah kerana ABI menyediakan nama yang unik untuk setiap jenis pembina, memastikan bahawa ia dianggap sebagai simbol yang berbeza oleh pemaut.

Kesimpulan

Pancaran dwi simbol pembina dalam kod yang disusun GCC adalah hasil daripada sokongan polimorfisme dan konvensyen penamaan Itanium C ABI. Memahami konsep ini menerangkan sebab di sebalik tingkah laku ini dan menangani sebarang kebimbangan tentang pelbagai definisi.

Atas ialah kandungan terperinci Mengapakah pembina untuk kelas tanpa kelas asas maya kelihatan diduakan dalam kod yang disusun GCC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan