Rumah >pembangunan bahagian belakang >C++ >Adakah `widget w(gadget(), doodad());` Pengisytiharan Pembolehubah atau Pengisytiharan Fungsi dalam C ?

Adakah `widget w(gadget(), doodad());` Pengisytiharan Pembolehubah atau Pengisytiharan Fungsi dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-19 08:43:03741semak imbas

Is `widget w(gadget(), doodad());` a Variable Declaration or a Function Declaration in C  ?

C's Most Vixing Parse: Membongkar Misteri Pengisytiharan Fungsi

Sambil memahami sintaks widget w(); adalah mudah, ramai pengaturcara bergelut untuk memahami bagaimana serpihan kod berikut mewakili pengisytiharan fungsi:

widget w( gadget(), doodad() ); // pitfall: not a variable declaration

Untuk membongkar misteri ini, adalah penting untuk menyelidiki peraturan pereputan C . Dalam pengisytiharan fungsi, argumen jenis tatasusunan merosot menjadi penunjuk yang menunjuk ke elemen pertama, manakala argumen jenis fungsi bertukar menjadi penunjuk fungsi.

Menggunakan prinsip ini, kod yang disebutkan di atas bertukar menjadi tandatangan berikut:

widget w( gadget(*)(), doodad(*)() );

Ini menunjukkan fungsi yang menerima dua argumen: penunjuk ke fungsi yang tidak mengambil argumen dan mengembalikan jenis alat, dan penunjuk kepada fungsi yang turut mengambil sifar hujah dan mengembalikan jenis doodad. Fungsi itu sendiri mengembalikan widget.

Kerumitan tidak berakhir di situ. Pertimbangkan contoh yang membingungkan ini:

widget w(gadget(x));

Bagaimana ini boleh menjadi pengisytiharan fungsi memandangkan x ialah pembolehubah?

Dalam C , ia dibenarkan untuk memasukkan tanda kurungan tambahan semasa mengisytiharkan pembolehubah, seperti alat x; dan gajet (x);. Ini terpakai pada argumen fungsi juga, membenarkan kod di atas ditafsirkan sebagai pengisytiharan fungsi yang mengambil satu argumen bernama x jenis alat dan mengembalikan widget.

Atas ialah kandungan terperinci Adakah `widget w(gadget(), doodad());` Pengisytiharan Pembolehubah atau Pengisytiharan Fungsi dalam C ?. 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