Pengoptimuman Nilai Pulangan atau Pindah?
Dalam C , apabila mengembalikan nilai daripada fungsi, terdapat dua pendekatan utama: menggunakan Nilai Pulangan Pengoptimuman (RVO) atau secara eksplisit menggunakan fungsi std::move. Soalan ini meneroka masa untuk menggunakan setiap kaedah, menggunakan contoh khusus sebagai kajian kes.
Contoh:
Pertimbangkan coretan kod berikut yang membaca data ke dalam objek SerialBuffer dan mengembalikannya:
SerialBuffer read(size_t size) const { SerialBuffer buffer(size); read(begin(buffer), end(buffer)); // Use RVO (first method) return buffer; // Explicit move (second method) // return std::move(buffer); }
Gunakan RVO:
Menurut jawapan yang diberikan, dalam kebanyakan kes, adalah disyorkan untuk menggunakan RVO (kaedah pertama). RVO membenarkan pengkompil mengubah secara automatik apa yang akan menjadi operasi salinan kepada operasi bergerak jika boleh. Pengoptimuman ini boleh meningkatkan prestasi dengan ketara, terutamanya untuk objek besar. Dalam contoh di atas, pengkompil mungkin menyedari bahawa objek SerialBuffer boleh dialihkan terus ke dalam pernyataan pulangan, menghapuskan keperluan untuk salinan.
Larang RVO:
Kaedah kedua, menggunakan std::move, secara jelas menghalang RVO. Ini berguna dalam senario tertentu di mana RVO tidak diingini. Sebagai contoh, jika kelas SerialBuffer mengandungi data yang dikongsi atau menjalankan operasi pembersihan dalam pemusnahnya, menggunakan std::move memastikan salinan yang betul dibuat dan bukannya pergerakan.
Kesimpulan:
Secara umum, adalah lebih baik untuk bergantung pada RVO untuk nilai pulangan. Pengkompil boleh menentukan dengan cekap masa untuk melakukan langkah, menghasilkan prestasi yang lebih baik tanpa memerlukan pengekodan eksplisit. Dalam kes luar biasa di mana RVO tidak sesuai, menggunakan std::move boleh dipertimbangkan. Walau bagaimanapun, adalah penting untuk memahami implikasi melumpuhkan RVO dan mengendalikan hayat objek dengan sewajarnya.
Atas ialah kandungan terperinci RVO atau `std::move` untuk Nilai Pulangan dalam C : Bilakah Saya Perlu Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!