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
Lepaskan: 2024-12-21 06:43:14
asal
455 orang telah melayarinya

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?
};
Salin selepas log masuk

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
};
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan