Rumah > pembangunan bahagian belakang > C++ > Mengapa `Class object();` Tidak Mencipta Objek C?

Mengapa `Class object();` Tidak Mencipta Objek C?

Susan Sarandon
Lepaskan: 2024-12-18 11:04:10
asal
722 orang telah melayarinya

Why Doesn't `Class object();` Create a C   Object?

Memahami Ketiadaan Invocation Pembina

Dalam C , pembina digunakan untuk memulakan objek kelas. Walau bagaimanapun, dalam coretan kod yang disediakan, pembina tidak digunakan, mengakibatkan tingkah laku yang tidak dijangka.

Masalahnya

Baris bermasalah:

Class object();
Salin selepas log masuk
Salin selepas log masuk

sebenarnya tidak panggil pembina untuk kelas Kelas. Sebaliknya, ia mengisytiharkan fungsi mengembalikan objek Kelas. Untuk memanggil pembina dengan betul dan mencipta objek, koma bertitik (;) mesti dilampirkan pada baris:

Class object;
Salin selepas log masuk

Behind the Scenes: The Most Vexing Parse

Sorotan coretan kod awal isu yang dikenali sebagai "penghuraian paling menjengkelkan" dalam C . Apabila menemui baris:

Class object();
Salin selepas log masuk
Salin selepas log masuk

penghuraikan C secara samar-samar mentafsirkannya sebagai sama ada pengisytiharan fungsi atau panggilan fungsi dengan senarai argumen kosong. Kekaburan ini selalunya membawa kepada kekeliruan dan hasil yang tidak dijangka.

Membetulkan Kod

Untuk memanggil pembina dan mencipta objek, kod itu hendaklah dikemas kini kepada:

#include <iostream>
using namespace std;

class Class {
    Class() {
        cout << "default constructor called";
    }

    ~Class() {
        cout << "destructor called";
    }
};

int main() {
    Class object; // Correctly invokes the constructor
}
Salin selepas log masuk

Jalankan kod yang diperbetulkan untuk melihat output yang dijangkakan:

default constructor called
destructor called
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa `Class object();` Tidak Mencipta Objek 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