Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Anda Bergerak Dari Objek Const dalam C?
Dalam C , fungsi std::move digunakan untuk memindahkan pemilikan objek. Walau bagaimanapun, persoalan biasa timbul: mengapakah mungkin untuk memanggil std::move pada objek const? Bukankah ini berlawanan dengan intuisi dan berpotensi berbahaya?
Helahnya terletak pada fakta bahawa std::move(const_object) tidak melakukan gerakan sebenar. Sebaliknya, ia mengarahkan pengkompil untuk mencuba langkah. Jika kelas tidak mempunyai pembina yang menerima rujukan const kepada rvalue (move constructor), pengkompil akan lalai kepada pembina salinan tersirat.
Pertimbangkan contoh berikut:
struct Cat { Cat(){} Cat(const Cat&) {std::cout << "COPY";} Cat(Cat&&) {std::cout << "MOVE";} }; int main() { const Cat cat; Cat cat2 = std::move(cat); // prints "COPY" }
Seperti yang anda lihat, walaupun kucing adalah objek const, pengkompil dengan selamat membina cat2 sebagai salinan. Ini kerana tiada pembina pergerakan tersedia untuk objek const dalam contoh ini.
Potensi perangkap yang diserlahkan oleh Scott Meyers dalam "Effective Modern C " ialah isu prestasi dan bukannya isu kestabilan. Pada dasarnya, percubaan untuk beralih dari objek const apabila pembina bergerak tidak tersedia akan menghasilkan salinan yang kurang cekap.
Walaupun nampaknya logik untuk menyekat std::move daripada beroperasi pada objek const, ini adalah bukan penyelesaian yang mudah kerana sebab-sebab berikut:
Atas ialah kandungan terperinci Bolehkah Anda Bergerak Dari Objek Const dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!