Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencetak Penunjuk Fungsi dalam C Tanpa Menggunakannya?
Mencetak Penunjuk Fungsi Tanpa Invocation
Apabila cuba mencetak fungsi tanpa kurungan (iaitu, sebagai f dan bukannya f()), seseorang mungkin menghadapi keputusan yang tidak dijangka seperti sentiasa mencetak nilai 1. Tingkah laku yang kelihatan paradoks ini berpunca daripada mekanisme asas yang terlibat.
Dalam kod yang disediakan, pernyataan cout << pr; sebenarnya tidak menggunakan fungsi pr. Sebaliknya, ia menghantar penuding fungsi pr ke cout. C secara tersirat mentafsir penuding ini sebagai nilai bool, dengan penuding bukan nol yang menilai kepada benar dan seterusnya mencetak sebagai 1.
Untuk mencetak penuding fungsi itu sendiri, seseorang mesti menghantarnya secara eksplisit ke penuding void* . Ini boleh dicapai dengan menggunakan ungkapan seperti cout << (void*)pr.
C 11 dan Function Pointer Overloading
Dengan kemunculan C 11, kaedah yang lebih mudah untuk mencetak penunjuk fungsi muncul. Melebihi << operator untuk penunjuk fungsi membolehkan output yang lebih bermaklumat. Sebagai contoh, seseorang boleh mentakrifkan lebihan beban yang mencetak alamat dan arity fungsi (bilangan argumen):
<code class="cpp">template <class RType, class ... ArgTypes> std::ostream & operator<<(std::ostream & s, RType(*func)(ArgTypes...)) { return s << "(func_ptr=" << (void*)func << ")(num_args=" << sizeof...(ArgTypes) << ")"; }
Lebihan ini akan mencetak output dalam format (func_ptr=
) (num_args=< ;arity>).Atas ialah kandungan terperinci Bagaimana untuk Mencetak Penunjuk Fungsi dalam C Tanpa Menggunakannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!