Rumah > pembangunan bahagian belakang > C++ > Mengapa Kelas C Mesti Mempunyai Pembina Lalai Ditakrifkan Pengguna untuk Membina Lalai-Membina Objek `const`?

Mengapa Kelas C Mesti Mempunyai Pembina Lalai Ditakrifkan Pengguna untuk Membina Lalai-Membina Objek `const`?

Barbara Streisand
Lepaskan: 2024-11-29 10:10:11
asal
516 orang telah melayarinya

Why Must C   Classes Have a User-Defined Default Constructor to Default-Construct a `const` Object?

Mengapa C Memerlukan Pembina Lalai Disediakan Pengguna untuk Membina Lalai-Membina Objek const?

Piawaian C mewajibkan bahawa jika program panggilan untuk permulaan lalai objek jenis const-qualified, jenis kelas asas mesti mempunyai lalai yang disediakan pengguna pembina. Keperluan ini berpunca daripada fakta bahawa:

  • kelas POD (Data Lama Biasa) tidak mempunyai permulaan lalai: Jika kelas POD tidak dilengkapi dengan pembina yang ditentukan pengguna, ia adalah layak untuk dimulakan lalai. Walau bagaimanapun, objek POD yang tidak mempunyai pemulaan tidak mempunyai tujuan praktikal, kerana keadaannya kekal tidak tentu.
  • Objek Const menuntut pemulaan segera: Tidak seperti objek POD, objek const memerlukan pemulaan segera kerana keadaannya tidak boleh diubah setelah ditubuhkan. Jika objek const jenis POD dibiarkan tanpa dimulakan, ia menjadi sia-sia kerana nilainya tidak boleh diubah suai.

Untuk mengelakkan kekeliruan ini, piawaian menetapkan bahawa objek const tidak boleh dibina daripada jenis POD yang kekurangan pembina lalai yang disediakan pengguna. Ini memastikan bahawa objek const sentiasa dimulakan semasa penciptaan.

Perbezaan Antara Kelas POD dan Bukan POD

Untuk menjelaskan, keperluan piawaian terpakai khusus untuk objek const bukan -Kelas POD. Kelas POD, yang tidak mempunyai fungsi maya atau kelas asas dan mempunyai ahli data yang merupakan POD sendiri, boleh dimulakan secara lalai walaupun tanpa pembina yang ditentukan pengguna. Sebaliknya, kelas bukan POD memerlukan pembina lalai yang disediakan pengguna untuk mendayakan permulaan lalai.

Contoh Ilustrasi

Pertimbangkan coretan kod berikut:

struct B {
  B(): x(42) {}
  int doSomeStuff() const { return x; }
  int x;
};

struct A {
  A() {} // Required by the standard
  B b; // Illustration purpose
};

int main() {
  const A a; // Valid due to user-provided default constructor in A.
}
Salin selepas log masuk

Dalam contoh ini, objek const 'a' struct A boleh dibina secara lalai kerana A mempunyai pembina lalai yang disediakan pengguna, yang memenuhi keperluan standard untuk kelas bukan POD.

Atas ialah kandungan terperinci Mengapa Kelas C Mesti Mempunyai Pembina Lalai Ditakrifkan Pengguna untuk Membina Lalai-Membina Objek `const`?. 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