Rumah > pembangunan bahagian belakang > C++ > Mengapa Pengendali Tugasan Salin C Mengembalikan Rujukan Daripada Salinan?

Mengapa Pengendali Tugasan Salin C Mengembalikan Rujukan Daripada Salinan?

Linda Hamilton
Lepaskan: 2024-12-21 04:15:09
asal
449 orang telah melayarinya

Why Do C   Copy Assignment Operators Return References Instead of Copies?

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

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

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

Sebaliknya:

A operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
Salin selepas log masuk

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!

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