Rumah > pembangunan bahagian belakang > C++ > Adakah Mengembalikan Rujukan Rvalue Sentiasa Lebih Cekap Daripada Mengembalikan Rujukan Lvalue?

Adakah Mengembalikan Rujukan Rvalue Sentiasa Lebih Cekap Daripada Mengembalikan Rujukan Lvalue?

Barbara Streisand
Lepaskan: 2024-12-24 00:15:10
asal
133 orang telah melayarinya

Is Returning by Rvalue Reference Always More Efficient Than Returning by Lvalue Reference?

Mengembalikan mengikut Rujukan Rvalue: Adakah Ia Lebih Cekap?

Memulangkan objek melalui rujukan rvalue mungkin tidak selalu lebih cekap daripada mengembalikan dengan lvalue rujukan. Ia boleh membawa kepada rujukan berjuntai jika objek yang dikembalikan adalah sementara yang akan dimusnahkan selepas fungsi kembali.

Kod Asal:

Coretan kod yang disediakan cuba untuk kembali rujukan rnilai yang dialihkan kepada objek Beta_ab sementara:

Beta_ab&& Beta::toAB() const {
    return move(Beta_ab(1, 1));
}
Salin selepas log masuk

Ini tidak disyorkan kerana ia kembali rujukan yang tergantung. Untuk memindahkan sementara ke dalam nilai pulangan dengan betul, fungsi harus mengembalikan nilai dan bukannya rujukan rnilai:

Beta_ab Beta::toAB() const {
    return Beta_ab(1, 1);
}
Salin selepas log masuk

Menggunakan Rujukan Rvalue dengan Fungsi Lain:

Mengembalikan rujukan nilai boleh memberi manfaat dalam situasi tertentu. Sebagai contoh, jika terdapat fungsi getAB() yang sering dipanggil pada objek sementara, ia boleh menjadi lebih cekap untuk mengembalikan rujukan nilai:

struct Beta {
  Beta_ab ab;
  Beta_ab const& getAB() const& { return ab; }
  Beta_ab &&getAB() && { return move(ab); }
};
Salin selepas log masuk

Dalam contoh ini, pergerakan diperlukan kerana ab bukan automatik tempatan atau nilai r sementara. Ref-qualifier && memastikan bahawa fungsi getAB() kedua digunakan pada rvalue sementara, menghasilkan perpindahan dan bukannya salinan.

Kesimpulan:

Semasa kembali dengan rujukan rnilai boleh menjadi cekap dalam beberapa kes, ia harus digunakan dengan berhati-hati untuk mengelakkan rujukan berjuntai. Mengembalikan nilai biasanya lebih disukai untuk fungsi yang mengembalikan objek sementara.

Atas ialah kandungan terperinci Adakah Mengembalikan Rujukan Rvalue Sentiasa Lebih Cekap Daripada Mengembalikan Rujukan Lvalue?. 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