Rumah >pembangunan bahagian belakang >C++ >Bilakah C Melangkau Pembina Salin?
Salin Pengoptimuman Pembina dalam C
Dalam C , dalam keadaan tertentu, pembina salinan mungkin tidak digunakan, menimbulkan persoalan tentang pengoptimuman pengkompil atau ciri bahasa yang tidak didokumentasikan.
Pertimbangkan perkara berikut kod:
class A { public: A(int value) : value_(value) { cout << "Regular constructor" << endl; } A(const A& other) : value_(other.value_) { cout << "Copy constructor" << endl; } private: int value_; }; int main() { A a = A(5); }
Orang akan menjangkakan output untuk memasukkan kedua-dua mesej "Pembina biasa" dan "Salin pembina". Walau bagaimanapun, dalam kes ini, pembina salinan tidak pernah dipanggil.
Tingkah laku ini bukan pengoptimuman pengkompil mahupun ciri tidak berdokumen C . Sebaliknya, ia dinyatakan secara eksplisit dalam piawaian C (§12.8.15) bahawa tugasan seperti T = x; boleh ditafsirkan sebagai T(x);, dengan berkesan menghapuskan T dalaman apabila tidak memerlukan salinan.
Dalam kes ini, pengkompil mengiktiraf bahawa membina objek A dan kemudian menyalinnya adalah berlebihan dan oleh itu meninggalkan panggilan pembina salin.
Untuk menguatkuasakan seruan pembina salin, seseorang boleh mencipta A pertama secara eksplisit objek:
A a; // Construct an empty A object a = A(5); // Copy-initialize it with another A object
Atas ialah kandungan terperinci Bilakah C Melangkau Pembina Salin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!