Dalam pengaturcaraan, fungsi std::move digunakan untuk memindahkan pemilikan sumber daripada satu pembolehubah kepada yang lain. Ia berkesan menghalang pembina salinan daripada dipanggil, membenarkan sumber dipindahkan dan bukannya disalin. Walaupun std::move biasanya digunakan dalam situasi tertentu, adalah penting untuk memahami apabila ia benar-benar perlu.
Satu contoh di mana std::move dianggap tidak perlu berlaku apabila fungsi mengembalikan objek yang dicipta sebagai xvalue . Dalam coretan kod di bawah, fungsi meh mengembalikan contoh Foo menggunakan pembina bergerak. Walau bagaimanapun, langkah itu adalah berlebihan kerana objek yang dikembalikan sudah menjadi nilai x.
struct Foo {}; Foo meh() { return std::move(Foo()); }
Walau bagaimanapun, terdapat senario di mana penggunaan std::move menjadi penting. Pertimbangkan kod berikut:
struct Foo {}; Foo meh() { Foo foo; // Perform operations on foo return std::move(foo); }
Dalam kes ini, std::move diperlukan kerana objek foo ialah nilai l dan hayatnya tidak pasti di luar skop fungsi. Dengan memanggil std::move secara eksplisit, sumber objek dipindahkan ke nilai pulangan, memastikan pengurusan sumber yang betul.
Alasan di sebalik tingkah laku ini diperincikan dalam bahagian 12.8/32 Piawaian C. Bahagian ini menggariskan syarat di mana operasi penyalinan daripada nilai l boleh digantikan dengan langkah. Mengikut piawaian, pengkompil hanya dibenarkan melakukan penggantian ini dalam situasi tertentu dan ia tidak boleh membuat perubahan ini sendiri.
Oleh itu, std::move harus digunakan pada nilai pulangan fungsi dalam keadaan berikut:
Dalam istilah yang dipermudahkan, untuk kod bukan templat , std::move boleh digunakan jika objek ialah nilai dan anda mahu ia dialihkan, tanpa mengira yang lain syarat.
Perlu diambil perhatian bahawa menggunakan std::move secara tidak perlu boleh menghalang penyingkiran pergerakan, mengurangkan peluang pengoptimuman. Walau bagaimanapun, ini biasanya bukan kebimbangan yang ketara untuk jenis murah untuk bergerak seperti std::vector. Untuk jenis atau templat yang mahal untuk dipindahkan yang kos pemindahan tidak diketahui, pertimbangan yang teliti harus diambil sebelum menggunakan std::move.
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan `std::move` untuk Nilai Pulangan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!