Mengapakah `std::move` Dipanggil `std::move` jika ia Sebenarnya Tidak Menggerakkan Apa-apa?

Susan Sarandon
Lepaskan: 2024-11-15 18:01:03
asal
546 orang telah melayarinya

Why is `std::move` Called `std::move` if it Doesn't Actually Move Anything?

Mengapa std::move Dinamakan std::move?

Fungsi std::move, walaupun namanya, tidak sebenarnya menggerakkan apa sahaja. Ia hanya menukar nilai l (ungkapan yang merujuk kepada objek) kepada nilai r (ungkapan yang mewakili objek sementara). Penukaran ini dilakukan melalui cast kepada kategori xvalue, yang berbeza daripada lvalues ​​dan prvalues.

Sebab pilihan penamaan ini berbalik kepada sejarah konsep. Pada asalnya, operasi bergerak diperkenalkan sebagai cara untuk menukar nilai dengan cekap tanpa menyalinnya. Sintaks awal untuk ini melibatkan menghantar lnilai kepada rnilai menggunakan static_cast. Untuk meningkatkan kebolehbacaan dan menyampaikan maksud pelakon ini, kata kunci move telah diperkenalkan sebagai gula sintaksis untuk static_cast.

Dalam konteks masa itu, penggunaan istilah "move" dimaksudkan untuk menunjukkan tujuan pelakon ini : untuk membolehkan semantik bergerak. Akibatnya ialah kod tersebut tidak menyampaikan tindakan teknikal yang tepat (melemparkan kepada nilai r), sebaliknya hasil yang diingini (menggerakkan objek).

Sejak beberapa tahun, konsep nilai dan nilai telah berkembang menjadi kategori nilai yang kita ada hari ini, dengan xvalues ​​mewakili objek yang telah dihantar ke rvalues. Akibatnya, kata kunci alih boleh dilihat sebagai mengelirukan, kerana ia hanya membayangkan tindakan yang mungkin atau mungkin tidak berlaku di bawah hud.

Walau bagaimanapun, pilihan menggunakan kata kunci pindah telah dikekalkan untuk mengekalkan kebolehbacaan dan elakkan kekeliruan yang mungkin timbul daripada sintaks yang tidak dikenali seperti cast_to_xvalue. Fungsi std::move kekal sebagai utiliti berharga yang membolehkan pengaturcara menyatakan semantik pergerakan secara ringkas, walaupun namanya mungkin tidak menangkap butiran teknikal operasinya dengan sempurna.

Atas ialah kandungan terperinci Mengapakah `std::move` Dipanggil `std::move` jika ia Sebenarnya Tidak Menggerakkan Apa-apa?. 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