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)); }
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); }
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); } };
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!