Rumah > pembangunan bahagian belakang > C++ > Mengapa Objek Const dalam C Memerlukan Pembina Lalai Ditakrifkan Pengguna?

Mengapa Objek Const dalam C Memerlukan Pembina Lalai Ditakrifkan Pengguna?

Susan Sarandon
Lepaskan: 2024-11-26 15:31:09
asal
916 orang telah melayarinya

Why Do Const Objects in C   Require a User-Defined Default Constructor?

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

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!

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