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
Linda Hamiltonasal
2024-12-21 04:15:09459semak imbas

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

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!

Kenyataan:
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