Mengapa C Memerlukan Pembina Yang Disediakan Pengguna untuk Permulaan Lalai Objek Konst
Piawaian C menentukan bahawa apabila memulakan lalai objek sesuatu jenis const-qualified, jenis mesti mempunyai pembina lalai yang disediakan pengguna. Keperluan ini timbul disebabkan oleh interaksi antara konsep POD (Data Lama Biasa) dan pemulaan objek dalam C .
Dalam C , objek kelas bukan POD dimulakan secara lalai. Walau bagaimanapun, POD, yang merupakan jenis data ringan tanpa pembina, pengesah atau pemusnah, tidak dimulakan secara lalai. Ini kerana POD direka bentuk untuk senario sensitif prestasi di mana pemulaan eksplisit adalah lebih cekap.
Apabila memulakan objek jenis yang layak const, piawaian mewajibkan pembina yang disediakan pengguna untuk memastikan objek itu boleh dimulakan. Ini adalah perlu kerana jika kelas asas ialah POD tanpa pembina, objek akan kekal tidak dimulakan, menjadikannya tidak berguna.
Pertimbangkan kod contoh:
struct B { B() : x(42) {} int doSomeStuff() const { return x; } int x; }; struct A { A() {} // Why is this required? B b; // Just for illustration }; int main() { const A a; }
Dalam kod ini, objek a adalah const-qualified. Jika kelas A tidak mempunyai pembina yang disediakan pengguna, ia akan dianggap sebagai POD. Memandangkan POD tidak dimulakan secara lalai, a akan dinyahmulakan, menjadikan kod itu tidak sah.
Walau bagaimanapun, kelas A mempunyai pembina yang disediakan pengguna, yang menjadikannya bukan POD. Oleh itu, a dimulakan secara lalai dengan memanggil pembina, dan kod berjaya dikompil.
Keperluan standard untuk pembina yang disediakan pengguna adalah untuk memastikan objek jenis yang layak const boleh dimulakan dan digunakan dengan betul .
Atas ialah kandungan terperinci Mengapa Objek Const dalam C Memerlukan Pembina Lalai Ditakrifkan Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!