Keperluan Pemulangan Rujukan/Const dalam Pengendali Tugasan Salin
Pengendali tugasan salinan dalam C menimbulkan persoalan mengenai jenis pemulangannya. Mengapa ia mengembalikan rujukan atau rujukan const dan bukannya salinan objek baharu? Untuk menjelaskan konsep ini, pertimbangkan senario berikut:
A a1(param); A a2 = a1; A a3; a3 = a2; // The problematic line
Dengan mengandaikan bahawa pengendali tugasan salinan ditakrifkan seperti berikut:
A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }
Memulangkan rujukan daripada operator tugasan salinan mempunyai kelebihan yang ketara terlebih memulangkan salinan. Dengan mengembalikan rujukan, ia membenarkan kerja yang minimum, kerana ia hanya menyalin nilai dari satu objek ke objek yang lain.
Walau bagaimanapun, pengembalian mengikut nilai menghasilkan overhed tambahan. Setiap kali pengendali tugasan dipanggil, ia memanggil pembina dan pemusnah, mengakibatkan penggunaan sumber yang tidak diperlukan. Contohnya:
A& operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice. Efficient.
Sebaliknya:
A operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
Oleh itu, mengembalikan rujukan atau rujukan const daripada operator penugasan salinan mengoptimumkan prestasi dengan mengelakkan penciptaan dan pemusnahan objek yang tidak perlu, meningkatkan kecekapan dan kebolehselenggaraan kod.
Atas ialah kandungan terperinci Mengapa Pengendali Tugasan Salin C Mengembalikan Rujukan Daripada Salinan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!