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

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

Susan Sarandon
Susan Sarandonasal
2024-12-18 11:04:10729semak imbas

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();

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;

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();

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
}

Jalankan kod yang diperbetulkan untuk melihat output yang dijangkakan:

default constructor called
destructor called

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