Rumah >pembangunan bahagian belakang >C++ >Mengapa C 11 Pemula Dalam Kelas Tidak Membenarkan Tanda Kurung?

Mengapa C 11 Pemula Dalam Kelas Tidak Membenarkan Tanda Kurung?

Susan Sarandon
Susan Sarandonasal
2024-12-20 05:55:09168semak imbas

Why Don't C  11 In-Class Initializers Allow Parentheses?

Kekaburan dalam Pemula Kelas: Peranan Pendakap dan Setara

Dalam C 11, pemula ahli dalam kelas hanya boleh ditakrifkan menggunakan kerinting pendakap ({}) atau tanda sama dengan (=). Sekatan ini menimbulkan persoalan mengapa kurungan tidak dibenarkan untuk tujuan ini.

Satu sebab utama pengehadan ini terletak pada potensi kekaburan sintaks. Pertimbangkan kelas berikut:

class BadTimes {
public:
    struct Overloaded;
    int Overloaded;            // Data member

    int confusing(Overloaded); // Function declaration
};

Jika kurungan dibenarkan untuk pemula, baris "int confusing(Overloaded);" boleh jadi samar-samar. Ia boleh ditafsirkan sama ada sebagai pengisytiharan fungsi (seperti yang ditunjukkan di atas) atau sebagai permulaan pembolehubah ahli jika kurungan digunakan untuk pemula:

int confusing{Overloaded};

Untuk menghapuskan kekaburan ini, pendakap kerinting atau tanda sama diperlukan . Ini memastikan tiada kekeliruan antara pemula pembolehubah ahli dan pengisytiharan fungsi:

class BadTimes {
public:
    struct Overloaded;
    int Overloaded;

    int confusing{Overloaded}; // Member variable initialized with Overloaded
};

Atas ialah kandungan terperinci Mengapa C 11 Pemula Dalam Kelas Tidak Membenarkan Tanda Kurung?. 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