Mengapakah Pembina Lalai Ditakrifkan Pengguna Diperlukan untuk Objek Konst Binaan Lalai dalam C ?
Piawaian C menentukan dalam bahagian 8.5 bahawa untuk objek const yang dimulakan lalai, jenisnya mestilah kelas dengan lalai yang disediakan pengguna pembina. Memahami keperluan ini memerlukan memahami perbezaan antara kelas POD (Data Lama Biasa) dan kelas bukan POD.
Kelas POD lwn. Bukan POD
Kelas POD ialah kelas tersebut tanpa pembina, pemusnah atau fungsi ahli maya yang ditentukan pengguna. Mereka boleh dimulakan dengan memori yang tidak dimulakan, membenarkan peruntukan memori yang cekap dan manipulasi ingatan terus.
Kelas bukan POD, sebaliknya, adalah kelas yang melanggar mana-mana kekangan POD. Ia mesti dimulakan sebelum digunakan, dan percubaan untuk memulakannya dengan memori yang tidak dimulakan mengakibatkan tingkah laku yang tidak ditentukan.
Keperluan untuk Pembina Lalai
Piawaian menguatkuasakan keperluan pengguna -menyediakan pembina lalai untuk objek const yang dibina lalai kerana:
Memastikan Utiliti Objek: Jika kelas POD tidak mempunyai pembina yang ditentukan pengguna, ia kekal tidak dimulakan secara lalai. Mengisytiharkan objek const bagi kelas POD yang tidak dimulakan akan menjadikan ia tidak berguna, kerana nilainya tidak boleh diubah suai.
POD p1; // uninitialized - can be assigned later const POD p2; // uninitialized - error, cannot be modified
Memudahkan Permulaan Bukan POD: Pengguna- pembina yang ditentukan menjadikan kelas bukan POD. Mengisytiharkan objek const bagi kelas bukan POD menjamin pemulaannya, tidak kira sama ada pemula disediakan.
nonPOD_B b1; // initialized const nonPOD_B b2; // initialized
Oleh itu, dengan memerlukan pembina lalai yang disediakan pengguna untuk lalai- objek const yang dibina, standard C memastikan bahawa objek const kelas POD pun dimulakan dengan betul dan, dengan itu, boleh digunakan.
Atas ialah kandungan terperinci Mengapa Objek Const Binaan Lalai dalam C Memerlukan Pembina Lalai Ditakrifkan Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!