Kekaburan "Penghuraian Paling Menjengkelkan": Membongkar Pemula Seragam
Di alam C , kekaburan "penghuraian paling menjengkelkan" boleh timbul apabila menemui pemula seragam, seperti yang ditunjukkan oleh kod berikut:
<code class="cpp">class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // What is Timer() ? And what type is dv? int time_keeper(Timer()); // This is a function right? And why isn't the argument "Timer (*) ()"? return 0; }</code>
Mentafsir dv
Dalam baris auto dv = Pemasa();, jenis dv bergantung pada tafsiran Pemasa(). Ini boleh sama ada:
Dalam kes ini, ia menandakan panggilan pembina, menyebabkan dv menjadi objek jenis Pemasa. Kata kunci auto membuat kesimpulan jenis berdasarkan pemula.
Memahami time_keeper
Dalam baris int time_keeper(Timer());, fungsi bernama time_keeper diisytiharkan. Hujah bukanlah penunjuk fungsi jenis Pemasa (*) (), seperti yang dijangkakan. Sebaliknya, ia mewakili penunjuk kepada fungsi yang mengembalikan Pemasa dan tidak mengambil hujah. Ini kerana:
Kesimpulannya
Kekaburan "penghuraian paling menjengkelkan" menyerlahkan potensi kekeliruan apabila mentafsir konstruk tertentu dalam C . Memahami konsep pemulaan seragam dan pereputan fungsi adalah penting untuk memahami senario sedemikian dengan betul.
Atas ialah kandungan terperinci Adakah `Pemasa()` Panggilan Pembina atau Panggilan Fungsi? Kekaburan \'Paling Menjengkelkan\' dalam C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!