Dalam C , apabila terlebih muatan kaedah yang menerima berbilang jenis, adalah penting untuk mengetahui potensi kekaburan. Seperti yang digambarkan di bawah:
<code class="cpp">class Output { public: static void Print(bool value) { std::cout << (value ? "True" : "False"); } static void Print(std::string value) { std::cout << value; } };</code>
Jika kita cuba memanggil kaedah Cetak dengan rentetan literal seperti berikut:
<code class="cpp">Output::Print("Hello World");</code>
Tanpa diduga, outputnya adalah "Benar" dan bukannya "Hello World ". Mengapa?
Dalam C , rentetan literal seperti "Hello World" bukan jenis std::string tetapi lebih kepada susunan aksara tetap. Walau bagaimanapun, ia boleh ditukar secara tersirat kepada nilai bool. Penukaran ini, yang dikenali sebagai jujukan penukaran standard, diutamakan oleh pengkompil berbanding pembina penukaran yang ditentukan pengguna untuk std::string.
Semasa resolusi beban lampau, pengkompil menentukan fungsi terbaik untuk memanggil setiap hujah. Keutamaan diberikan kepada jujukan penukaran standard berbanding penukaran yang ditentukan pengguna. Dalam kes kami, penukaran standard daripada "Hello World" kepada bool dianggap lebih baik daripada penukaran yang ditentukan pengguna kepada std::string.
Untuk memastikan bahawa std :: string overload digunakan, kita perlu secara eksplisit lulus argumen std::string:
<code class="cpp">Output::Print(std::string("Hello World"));</code>
Ini menyelesaikan kekaburan dan mengeluarkan "Hello World" dengan betul.
Memahami penukaran tersirat dan kesannya terhadap penyelesaian beban lampau adalah penting dalam C . Secara lalai, penukaran standard diutamakan daripada penukaran yang ditentukan pengguna. Oleh itu, adalah penting untuk mengetahui penukaran sedemikian dan membuat penukaran jenis eksplisit apabila perlu untuk mengelakkan tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Mengapakah \'Hello World\' Mencetak sebagai \'Benar\' dalam Kaedah Cetakan C Terlebih Beban?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!