Rumah > pembangunan bahagian belakang > C++ > Mengapakah rentetan literal mencetuskan lebihan `bool` dalam lebihan fungsi?

Mengapakah rentetan literal mencetuskan lebihan `bool` dalam lebihan fungsi?

Patricia Arquette
Lepaskan: 2024-11-02 13:47:30
asal
426 orang telah melayarinya

Why does a string  literal trigger the `bool` overload in function overloading?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan