Adakah `Pemasa()` Panggilan Pembina atau Panggilan Fungsi? Kekaburan \'Paling Menjengkelkan\' dalam C

Susan Sarandon
Lepaskan: 2024-11-02 13:25:30
asal
914 orang telah melayarinya

Is `Timer()` a Constructor Call or a Function Call? The

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>
Salin selepas log masuk

Mentafsir dv

Dalam baris auto dv = Pemasa();, jenis dv bergantung pada tafsiran Pemasa(). Ini boleh sama ada:

  • Panggilan pembina, menginstant objek jenis Pemasa.
  • Panggilan fungsi kepada operator hipotesis() beban lampau dalam Pemasa, kerana pemulaan seragam boleh digunakan untuk memanggil panggilan fungsi.

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:

  • Fungsi secara tersirat mereput kepada penuding untuk berfungsi apabila diluluskan sebagai argumen.
  • Dalam contoh khusus ini, panggilan fungsi mereput kepada penuding kepada fungsi yang mengembalikan Pemasa dan tidak mengambil sebarang hujah, iaitu, Pemasa(*)().

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan