Rumah > pembangunan bahagian belakang > C++ > Mengapa Pembina Salinan Tidak Dipanggil Apabila Menetapkan kepada Objek Sedia Ada dalam C ?

Mengapa Pembina Salinan Tidak Dipanggil Apabila Menetapkan kepada Objek Sedia Ada dalam C ?

DDD
Lepaskan: 2024-12-08 09:22:11
asal
577 orang telah melayarinya

Why Isn't the Copy Constructor Called When Assigning to an Existing Object in C  ?

Mengapa Copy Constructor Dipintas Apabila Menetapkan Nilai Baharu kepada Objek Sedia Ada

Dalam coretan kod yang disediakan, objek a dimulakan dengan nilai 5. Pembina standard A digunakan seperti yang dijangkakan. Walau bagaimanapun, bertentangan dengan andaian, pembina salinan tidak dipanggil semasa menetapkan objek yang baru dibina.

Tingkah laku ini bukan hasil pengoptimuman pengkompil mahupun peninggalan dalam spesifikasi bahasa. Ia didokumenkan secara eksplisit dalam piawaian C (§12.8.15, ms. 211). Piawaian menyatakan bahawa "ia boleh diterima sepenuhnya" untuk tugasan berikut menjadi semantik semantik:

T = x;
T(x);
Salin selepas log masuk

Secara logiknya, tugasan berlebihan seperti T(T(x)) boleh dialih keluar daripada pengoptimuman kod . Oleh itu, pengkompil secara automatik memanggil pembina lalai untuk memulakan a dan kemudian memberikan secara langsung objek yang baru dibina.

Untuk memaksa pembina salinan dipanggil, seseorang perlu membina lalai secara eksplisit sebelum menetapkan:

A a; // Default-construct 'a'

// Copy constructor will be called to
// copy data from the newly constructed object.
a = A(5);
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Pembina Salinan Tidak Dipanggil Apabila Menetapkan kepada Objek Sedia Ada 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan