Rumah >pembangunan bahagian belakang >C++ >Mengapakah Pemula Dalam Kelas Terhad kepada Pendakap Kerinting atau Operator Tugasan?

Mengapakah Pemula Dalam Kelas Terhad kepada Pendakap Kerinting atau Operator Tugasan?

DDD
DDDasal
2024-12-21 06:43:14503semak imbas

Why Are In-Class Initializers Restricted to Curly Braces or the Assignment Operator?

Pencegahan Kekaburan dalam Pemula Dalam Kelas

Mengapakah pemula dalam kelas dihadkan untuk disertakan dalam pendakap kerinting atau menggunakan pengendali tugasan (=)? Tidak seperti pengisytiharan kaedah, yang boleh menggunakan kurungan, pemula dalam kelas mesti mematuhi sintaks khusus ini.

Rasional untuk Sekatan

Penghadan ini bertujuan untuk mengelakkan potensi sintaksis kekaburan. Pertimbangkan definisi kelas berikut:

class BadTimes {
    struct Overloaded;
    int Overloaded;            // Strange but legal data member

    int confusing(Overloaded); // Function declaration or data member initialization?
};

Jika kurungan dibenarkan untuk pemula dalam kelas, kod ini akan membawa kepada kesamaran. Di satu pihak, baris "int confusing(Overloaded);" boleh ditafsirkan sebagai pengisytiharan fungsi yang menerima parameter jenis Overloaded dan mengembalikan int. Sebaliknya, ia juga boleh dibaca sebagai permulaan ahli data jenis int dengan nilai ahli data Terlebih muatan. (Ini berkaitan dengan isu "Most Vexing Parse" yang terkenal.)

Menghapuskan Kesamaran dengan Pendakap Kerinting

Dengan menguatkuasakan penggunaan pendakap kerinting, kekaburan ini dihapuskan:

class BadTimes {
    struct Overloaded;
    int Overloaded;            // Strange but legal data member

    int confusing{Overloaded}; // Clearly a data member initialization
};

Kini ternyata mengelirukan ialah int yang dimulakan secara eksplisit kepada nilai Overloaded, kerana tiada skop untuk mentafsirkannya sebagai pengisytiharan fungsi.

Sekatan sintaks ini memastikan takrifan kelas yang jelas dan jelas, menghalang akibat yang tidak diingini yang timbul daripada kekeliruan sintaksis.

Atas ialah kandungan terperinci Mengapakah Pemula Dalam Kelas Terhad kepada Pendakap Kerinting atau Operator Tugasan?. 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