Rumah > pembangunan bahagian belakang > C++ > Mengapa Mengembalikan Rujukan, Bukan Nilai, daripada Operator Tugasan Salinan C?

Mengapa Mengembalikan Rujukan, Bukan Nilai, daripada Operator Tugasan Salinan C?

Mary-Kate Olsen
Lepaskan: 2024-12-15 16:47:08
asal
884 orang telah melayarinya

Why Return a Reference, Not a Value, from a C   Copy Assignment Operator?

Memulangkan melalui Rujukan dalam Operator Tugasan Salin: Konsep Berbelit-belit Didedahkan

Konsep mengembalikan rujukan daripada operator tugasan salinan dalam C boleh membingungkan. Mengapa tidak hanya mengembalikan salinan objek baharu? Untuk merungkai enigma ini, mari kita menyelidiki contoh yang melibatkan kelas A dan pengendali tugasannya:

class A {
public:
    A(int param);
    A& operator=(const A& a);

private:
    int param;
};

int main() {
    A a1(10);
    A a2 = a1;
    A a3;

    a3 = a2; // The problematic line
}

A::A(int param) : param(param) {}

A& A::operator=(const A& a) {
    if (this == &a) {
        return *this;
    }
    param = a.param;
    return *this;
}
Salin selepas log masuk

Pada mulanya, mengembalikan nilai daripada pengendali tugasan kelihatan seperti pilihan yang berdaya maju. Walau bagaimanapun, pengembalian mengikut nilai dalam konteks ini menimbulkan beberapa kelemahan. Dengan setiap panggilan kepada pengendali tugasan, kedua-dua pembina dan pemusnah digunakan. Pertimbangkan rantai tugasan berikut:

a = b = c;
Salin selepas log masuk

Apabila anda mengembalikan nilai, rantaian ini mencetuskan dua panggilan kepada pengendali tugasan, dua panggilan kepada pembina salinan dan dua panggilan kepada pemusnah. Proses pembaziran ini menggunakan sumber yang tidak perlu dan tidak menawarkan faedah yang ketara.

Sebaliknya, pemulangan melalui rujukan meminimumkan overhed dengan ketara. Nilai disalin dari satu objek ke objek lain tanpa memerlukan panggilan pembina atau pemusnah tambahan. Pengoptimuman ini amat penting dalam senario yang kompleks di mana berbilang tugasan berlaku.

Ringkasnya, pengembalian mengikut nilai dalam pengendali tugasan salinan tidak menawarkan kelebihan tetapi dikenakan penalti prestasi yang ketara. Sebaliknya, pemulangan melalui rujukan memastikan penggunaan sumber yang cekap sambil mengekalkan kefungsian pengendali.

Atas ialah kandungan terperinci Mengapa Mengembalikan Rujukan, Bukan Nilai, daripada Operator Tugasan Salinan 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan