Rumah >pembangunan bahagian belakang >C++ >Adakah Pembina Lalai C Memulakan Jenis Terbina Dalam?

Adakah Pembina Lalai C Memulakan Jenis Terbina Dalam?

DDD
DDDasal
2024-12-09 06:31:05281semak imbas

Do C  's Default Constructors Initialize Built-in Types?

Adakah Jenis Terbina Dalam Dimulakan oleh Pembina Lalai C?

Dalam C , pembina lalai tersirat yang dijana oleh pengkompil ialah bertanggungjawab untuk memulakan ahli kelas. Walau bagaimanapun, terdapat salah tanggapan umum bahawa tingkah laku ini meluas kepada jenis terbina dalam.

Gelagat Permulaan Lalai

Pembina lalai tersirat tidak tidak memulakan ahli jenis terbina dalam. Apabila pembina sedemikian digunakan tanpa permulaan yang ditentukan pengguna, ahli jenis terbina dalam kekal tidak dimulakan.

Pengecualian kepada Peraturan

Walaupun pembina lalai biasanya tidak memulakan jenis terbina dalam, terdapat keadaan tertentu di mana permulaan mungkin berlaku:

Permulaan Nilai:
Dalam C 03 dan kemudian, sintaks C() memanggil permulaan nilai untuk kejadian kelas. Jika kelas tidak mempunyai pembina yang diisytiharkan pengguna, permulaan nilai akan memulakan sifar ahli jenis terbina dalam.

Permulaan Agregat:
Sintaks permulaan agregat, seperti C c = {}, melakukan pemula tanpa menggunakan pembina. Ini menghasilkan permulaan sifar ahli jenis terbina dalam.

Contoh:

Pertimbangkan kelas berikut tanpa pembina yang diisytiharkan pengguna:

class C { 
public:
  int x;
};

Tanpa Eksplisit Permulaan:

C c; // Compiler-provided default constructor used
// c.x contains garbage

Dengan Permulaan Nilai Eksplisit:

C c = C(); // Value-initialization used
assert(c.x == 0);

Dengan Permulaan Agregat:

C c = {}; // Aggregate initialization
assert(c.x == 0);

Adalah penting untuk ambil perhatian bahawa tingkah laku yang diterangkan di atas mungkin berbeza bergantung pada versi C yang digunakan dan definisi kelas khusus.

Atas ialah kandungan terperinci Adakah Pembina Lalai C Memulakan Jenis Terbina Dalam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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