Rumah > pembangunan bahagian belakang > C++ > Mengapakah `std::move` Dipanggil `std::move` jika ia Tidak Menggerakkan Apa-apa?

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

Mary-Kate Olsen
Lepaskan: 2024-11-20 04:40:02
asal
940 orang telah melayarinya

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

Mengapa std::move Dinamakan std::move?

Bertentangan dengan namanya, std::move tidak menggerakkan apa-apa secara fizikal; sebaliknya, ia menghantar objek kepada rujukan rnilai atau, lebih khusus, nilai x. Keputusan untuk menamakan pergerakan fungsi bukan untuk menipu atau mengelirukan tetapi untuk menjadikan kod lebih mudah dibaca.

Pada peringkat awal rujukan nilai, fungsi std::swap perlu dioptimumkan untuk prestasi. Kaedah asal menggunakan static_cast ungkapan, yang mengaburkan tujuan asas kod.

Dengan memperkenalkan std::move, hantaran eksplisit telah digantikan dengan gula sintaks yang menekankan maksud kod: untuk mendayakan semantik pindah. Menjelaskan butiran teknikal yang tepat, seperti "cast to rvalue," akan menimbulkan soalan tambahan, mengaburkan perkara utama.

Sejarah std::move

Sejarah std:: move kembali kepada cadangan untuk rujukan rvalue pada tahun 2002. Fungsi move pada mulanya diperkenalkan sebagai gula sintaks untuk static_cast, dengan pemahaman bahawa beberapa pengaturcara pada masa itu memahami sepenuhnya perkaitan antara rnilai dan semantik bergerak.

Apabila bahasa C berkembang, konsep rnilai telah diperhalusi ke dalam apa yang kita ketahui hari ini sebagai kategori nilai . Menggunakan nama yang berbeza, seperti cast_to_xvalue, untuk menerangkan dengan lebih tepat operasi mungkin telah menghalang kebolehbacaan.

Apakah std::move Does

Pada intinya, std::move hanya membuang objek kepada nilai x. Cast ini tidak mempunyai kesan pada objek mudah alih yang remeh dan untuk objek dengan pengendali tugasan bergerak, ia memastikan bahawa pengendali tugasan alih dipanggil dan bukannya pengendali tugasan salinan.

Dari segi kod objek yang dijana, std:: bergerak tidak mempunyai kesan untuk objek mudah alih yang remeh. Untuk objek dengan pengendali tugasan bergerak, ia boleh mengubah resolusi beban lampau. Walau bagaimanapun, pada masa larian, std::move secara berkesan hilang dan kesannya hanya pada masa penyusunan.

Atas ialah kandungan terperinci Mengapakah `std::move` Dipanggil `std::move` jika ia 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