Mengapa "menghentikan fungsi tanpa memanggilnya (bukan f() tetapi f;). Cetak 1 Sentiasa?"
Dalam ini kod, kod cuba "memanggil" fungsi bernama pr tanpa menggunakan kurungan. Walau bagaimanapun, ini sebenarnya tidak memanggil fungsi. Sebaliknya, ia menghantar penuding fungsi kepada fungsi cout. Apabila penuding fungsi secara tersirat ditukar kepada nilai bool, ia dinilai sebagai benar. Memandangkan true bersamaan dengan 1 dalam C , output sentiasa 1.
Untuk menjelaskan, baris berikut daripada kod yang disediakan tidak menggunakan fungsi pr:
<code class="cpp">pr; cout << pr; // output: 1 cout << *pr; // output: 1 (dereferencing the function pointer, which is still true) cout << ≺ // output: 1 (address of the function, which is a non-zero value)</code>
Untuk benar-benar memanggil fungsi pr, anda perlu menggunakan kurungan seperti pr().
Tingkah laku ini berpunca daripada fakta bahawa penunjuk fungsi boleh ditukar secara tersirat kepada bool. Dalam C 11, adalah mungkin untuk membebankan operator<< untuk penunjuk fungsi untuk memberikan output yang lebih bermaklumat. Walau bagaimanapun, ini masih tidak akan berfungsi untuk fungsi terlampau beban atau templat fungsi tanpa menyatakan secara eksplisit beban yang diingini (biasanya melalui cast).
Atas ialah kandungan terperinci Mengapakah \'cout\' Mencetak \'1\' Apabila Penunjuk Fungsi Digunakan Tanpa Tanda Kurung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!