Rumah >pembangunan bahagian belakang >C++ >Mengapa Resolusi Lebihan Gagal Apabila Menstrim Objek melalui Penukaran Tersirat kepada Rentetan?
Coretan kod yang disediakan mentakrifkan struct NameType dengan operator std::string() overload dan Person struct yang mengandungi contoh NameType bernama nama. Apabila cuba menstrim objek Orang menggunakan std::cout << p.penyataan nama, pengkompil gagal menyelesaikan beban berlebihan kerana ralat dalam mencari operator yang sepadan<< untuk ungkapan Person::name.
Isu timbul kerana peraturan C 98 yang melarang penukaran tersirat apabila salah satu argumen fungsi mengandungi parameter templat yang terlibat dalam potongan hujah templat. Dalam kes ini, lebihan yang diingini ialah instantiasi templat dengan carta parameter templat, sifat dan Peruntukan. Memandangkan semua hujah mengandungi parameter templat yang terlibat dalam potongan hujah, penukaran tersirat tidak dibenarkan, mengakibatkan kegagalan resolusi beban lampau.
Untuk menyelesaikan isu ini, pengisytiharan lebihan eksplisit untuk operator<< yang mengendalikan struct Orang harus disediakan. Ini boleh dicapai dengan mentakrifkan fungsi lebihan tersuai dengan tandatangan berikut:
<code class="cpp">std::ostream& operator<<(std::ostream& os, const Person& p);</code>
Dengan menyediakan lebihan eksplisit, pengkompil boleh menyelesaikan lebihan dan berjaya menstrim objek Orang.
Atas ialah kandungan terperinci Mengapa Resolusi Lebihan Gagal Apabila Menstrim Objek melalui Penukaran Tersirat kepada Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!