Rumah > pembangunan bahagian belakang > C++ > Mengapakah Pembina Lalai Persendirian Boleh Digunakan Secara Tersirat dalam C ?

Mengapakah Pembina Lalai Persendirian Boleh Digunakan Secara Tersirat dalam C ?

Susan Sarandon
Lepaskan: 2024-11-12 04:30:02
asal
1004 orang telah melayarinya

Why Can a Private Default Constructor Be Implicitly Invoked in C  ?

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

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!

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