Rumah >pembangunan bahagian belakang >C++ >Kekaburan Jujukan Penukaran: Bilakah Operator Penukaran Trump sebagai Pembina?

Kekaburan Jujukan Penukaran: Bilakah Operator Penukaran Trump sebagai Pembina?

DDD
DDDasal
2024-11-12 06:17:02942semak imbas

Conversion Sequence Ambiguity: When Does a Conversion Operator Trump a Constructor?

Kekaburan Jujukan Penukaran: Keutamaan Pembina Penukaran berbanding Operator

Apabila memulakan objek kelas B daripada objek kelas A, kekaburan boleh timbul jika kedua-dua pembina penukaran dan pengendali penukaran ditakrifkan. Interaksi antara fungsi ini menentukan yang mana satu akan digunakan.

Penubuhan Keutamaan

Menurut standard C (8.5/14), jujukan penukaran yang ditentukan pengguna yang boleh menukar dari A ke B dikira, dan yang terbaik dipilih melalui resolusi beban lampau. Pengendali penukaran dianggap hanya jika pembina penukaran tidak berkenaan.

Transformasi Parameter

Leraian beban berlebihan mengubah fungsi penukaran dan pembina menjadi senarai parameter yang sepadan dengan hujah panggilan . Untuk pengendali penukaran, parameter objek tersirat dijana, mewujudkan pengikatan antara parameter fungsi operator dan objek sumber.

Calon Menang

Operator penukaran menang kerana peraturan "kelayakan const paling sedikit" (13.3.3.2/3). Dalam kes ini, pembina B(const A&) mempunyai rujukan const sebagai parameternya, manakala pengendali pengendali penukaran B() mempunyai rujukan bukan const. Memandangkan objek sumber ialah nilai r (sementara), rujukan bukan const boleh mengikatnya.

Perspektif Berorientasikan Objek

Dari sudut pandangan berorientasikan objek, pilihan lalai operator penukaran A ke atas pembina B menunjukkan bahawa tanggungjawab adalah pada kelas sumber (A) untuk menentukan prosedur penukaran. Walau bagaimanapun, masih boleh dipertikaikan sama ada B, sebagai kelas destinasi, harus mempunyai tanggungjawab utama untuk penukaran ini.

Atas ialah kandungan terperinci Kekaburan Jujukan Penukaran: Bilakah Operator Penukaran Trump sebagai Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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