Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Kod C Saya Mencetak \"True\" Daripada \"Hello World\"?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 03:51:02380semak imbas

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>

Apabila memanggil kaedah seperti berikut:

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

Anda mungkin terkejut melihat output:

True

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>

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!

Kenyataan:
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