Bilakah Pembina Persendirian Bukan Pembina Persendirian?
Dalam C , mengisytiharkan pembina lalai peribadi mungkin kelihatan seperti cara mudah untuk menghalang instantiasi objek. Walau bagaimanapun, yang menghairankan, pembina lalai peribadi masih boleh digunakan secara tersirat.
Soalan:
Pertimbangkan kod berikut:
class C { C() = default; }; int main() { C c; // error: default constructor private auto c2 = C(); // error: default constructor private }
Mengapa pembina kelihatan peribadi tetapi boleh dipanggil secara tersirat dengan pemula pendakap?
Jawapan:
Kuncinya terletak pada spesifikasi C 14. Pembina yang disediakan pengguna ialah pembina yang diisytiharkan secara eksplisit tanpa lalai atau dipadamkan. Memandangkan pembina lalai C telah diingkari secara eksplisit pada pengisytiharan pertamanya, ia tidak dianggap disediakan oleh pengguna.
Akibatnya, C kekurangan pembina yang disediakan pengguna dan menjadi agregat, menurut 8.5.1/1 daripada spesifikasi. Agregat ditakrifkan sebagai kelas tanpa ahli data bukan statik peribadi atau dilindungi, tiada kelas asas, tiada fungsi maya dan tiada pembina yang disediakan pengguna. Ini menerangkan sebab permulaan pendakap boleh berjaya mencipta objek C, walaupun pembina lalai bersifat peribadi secara teknikal.
Atas ialah kandungan terperinci Mengapakah Pembina Lalai Persendirian Boleh Digunakan Secara Tersirat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!