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!