Kegagalan Penyelesaian Lebihan Apabila Menstriman Objek melalui Penukaran Tersirat kepada Rentetan
Penerangan Isu
Tersirat penukaran kepada rentetan biasanya tidak digalakkan, dan membebankan operator output (<<) untuk jenis yang ditentukan pengguna ialah pendekatan yang disyorkan. Walau bagaimanapun, kod yang melibatkan penukaran tersirat dan penstriman objek boleh mengakibatkan kekaburan resolusi beban berlebihan.
Pertimbangkan contoh berikut:
<code class="cpp">struct NameType { operator std::string() { return "wobble"; } }; struct Person { NameType name; }; int main() { std::cout << "bobble"; std::cout << "wibble"; Person p; std::cout << p.name; }</code>
Mesej Ralat
Menyusun kod ini dengan GCC 4.3.4 menghasilkan yang berikut ralat:
prog.cpp: In function ‘int main()’: prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’
Punca Punca
Set lebihan beban tidak termasuk lebihan beban yang diingini disebabkan oleh gabungan faktor:
Sekatan ADL
Pencarian bergantung kepada hujah (ADL) tidak terlibat secara langsung dalam isu ini. ADL ialah ciri masa kompilasi yang digunakan apabila pengkompil sedang menyelesaikan panggilan fungsi. Dalam kes ini, penukaran tersirat kepada rentetan dilakukan oleh pengkompil tanpa sebarang panggilan fungsi yang terlibat.
Atas ialah kandungan terperinci Mengapakah Penstriman Objek dengan Penukaran Tersirat kepada Rentetan Menyebabkan Kegagalan Resolusi Lebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!