Rumah >pembangunan bahagian belakang >C++ >Mengapakah rentetan literal mencetuskan lebihan `bool` dalam lebihan fungsi?
String Literal Ambiguity in Function Overloading with bool
Apabila mentakrifkan kaedah terlebih beban yang menerima kedua-dua bool dan std::string hujah, pembangun mungkin menghadapi tingkah laku yang tidak dijangka apabila menyediakan literal rentetan. Daripada menggunakan std::string overload, bool overload diutamakan.
Untuk memahami tingkah laku ini, pertimbangkan situasi berikut:
<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; } }; Output::Print("Hello World");</code>
Walaupun menyediakan rentetan literal, Print( ) kaedah dengan lebihan bool digunakan. Ini kerana literal rentetan dalam C boleh ditukar secara tersirat kepada nilai bool. Khususnya, "Hello World" ialah tatasusunan const char* yang boleh ditafsirkan sebagai penunjuk kepada const char, yang seterusnya boleh ditukar secara tersirat kepada bool. Penukaran ini dianggap sebagai jujukan penukaran standard.
C mengutamakan jujukan penukaran standard berbanding penukaran yang ditentukan pengguna (cth., penukaran daripada std::string ke bool). Menurut piawaian C (§13.3.3.2/2), jujukan penukaran standard sentiasa dianggap sebagai jujukan penukaran yang lebih baik.
Tingkah laku ini boleh diubah dengan secara eksplisit menyediakan argumen std::string kepada Print( ) kaedah:
<code class="cpp">Output::Print(std::string("Hello World"));</code>
Atas ialah kandungan terperinci Mengapakah rentetan literal mencetuskan lebihan `bool` dalam lebihan fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!