Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Mencetak Nama Fungsi dalam C Menghasilkan \"1\"?

Mengapa Mencetak Nama Fungsi dalam C Menghasilkan \"1\"?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 03:40:03726semak imbas

Why Does Printing a Function Name in C   Result in

menyebut Fungsi Tanpa Memanggil: Membongkar Misteri

Bayangkan ini: anda sedang mengekod dan bukannya menggunakan fungsi dengan kurungan, anda hanya mencetak namanya. Yang menghairankan, hasilnya sentiasa 1. Pendekatan yang tidak konvensional ini membuatkan anda bingung, tentang 1 dan ketiadaan penunjuk fungsi yang dijangkakan.

Mari kita mendalami selok-belok kod anda:

<code class="c++">#include <iostream>
using namespace std;

void pr()
{
    cout << "sth";
}

int main()
{
    pr;
    cout << pr; // output: 1
    cout << *pr; // output: 1
    cout << &pr; // output: 1
}

Bertentangan dengan niat anda, anda sebenarnya tidak memanggil fungsi pr dalam cout<< kenyataan. Sebaliknya, anda menghantar penunjuk fungsinya kepada cout. Ini menyebabkan pr ditukar secara tersirat kepada nilai Boolean, menghasilkan 1s di mana-mana dalam output anda.

Untuk meningkatkan pemahaman anda, pertimbangkan untuk menggunakan cout << boolalpha sebelum dicetak. Ini akan memaparkan benar dan bukannya 1, mengukuhkan sifat Boolean output.

Sementara C 11 menawarkan penyelesaian yang elegan:

<code class="c++">template <class RType, class ... ArgTypes>
std::ostream & operator<<(std::ostream & s, RType(*func)(ArgTypes...))
{
    return s << "(func_ptr=" << (void*)func << ")(num_args="
             << sizeof...(ArgTypes) << ")";
}</code>

Lebih beban ini membolehkan anda mencetak penunjuk fungsi arity arbitrari , memaparkan maklumat seperti alamat penuding fungsi dan bilangan hujahnya.

Jadi, anda mempunyainya: 1 yang membingungkan bukan kebetulan semata-mata tetapi hasil daripada penukaran jenis tersirat. Memahami tingkah laku ini adalah penting untuk mengelakkan hasil yang tidak dijangka dan mencipta kod yang lebih mantap.

Atas ialah kandungan terperinci Mengapa Mencetak Nama Fungsi dalam C Menghasilkan \"1\"?. 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