Mengapa Kod C Saya Mencetak \'True\' Daripada \'Hello World\'?

Mary-Kate Olsen
Lepaskan: 2024-11-03 03:51:02
asal
379 orang telah melayarinya

Why Does My C   Code Print

String Literal Matching Boolean Overload Daripada std::string

Pertimbangkan kod C 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;
    }
};</code>
Salin selepas log masuk

Apabila memanggil kaedah seperti berikut:

<code class="cpp">Output::Print("Hello World");</code>
Salin selepas log masuk

Anda mungkin terkejut melihat output:

True
Salin selepas log masuk

Mengapa kelebihan boolean kaedah Cetak dipanggil dan bukannya std: :String overload?

Memahami Mekanisme Penukaran

Rentetan literal dalam C , seperti "Hello World", disimpan sebagai tatasusunan aksara const. Walau bagaimanapun, ia boleh ditukar secara tersirat kepada penunjuk kepada aksara const, yang kemudiannya boleh ditukar kepada bool.

Dalam kod yang disediakan, pengkompil memilih jujukan penukaran standard daripada "Hello World" untuk bool berbanding pengguna- turutan penukaran yang ditentukan daripada "Hello World" kepada std::string. Keutamaan ini adalah berdasarkan standard C, yang menyatakan bahawa jujukan penukaran standard diutamakan berbanding jujukan penukaran yang ditentukan pengguna.

Menyelesaikan Isu

Untuk memastikan bahawa std :: string overload dipanggil, secara eksplisit lulus argumen std::string:

<code class="cpp">Output::Print(std::string("Hello World"));</code>
Salin selepas log masuk

Dengan berbuat demikian, anda memaksa pengkompil untuk menggunakan std::string overload, yang akan mengeluarkan "Hello World" dengan betul .

Atas ialah kandungan terperinci Mengapa Kod C Saya Mencetak \'True\' Daripada \'Hello World\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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