C 11 memperkenalkan fungsi std::move untuk menyokong semantik bergerak. Ini menimbulkan persoalan: mengapa std::move boleh digunakan pada objek malar?
Jika kita cuba mengalihkan objek malar, nampaknya kita cuba mengubahnya, yang tidak masuk akal. Walau bagaimanapun, std::move dengan bijak sebenarnya tidak menggerakkan apa-apa. Sebaliknya, ia mengarahkan pengkompil untuk cuba mengalihkan objek.
Jika kelas objek mempunyai pembina bergerak, pergerakan akan berlaku seperti yang dijangkakan. Tetapi jika kelas tidak, pengkompil sebaliknya akan menggunakan pembina salinan, memastikan objek tetap disalin dengan selamat.
Sebagai contoh:
struct Cat { Cat() {} }; const Cat cat; Cat cat2 = std::move(cat);
Dalam kes ini, std ::move akan kembali kepada pembina salinan, mencetak "COPY" dan bukannya "MOVE" jika std::cout ditambahkan pada pembina.
std:: gelagat pergerakan pada objek malar bukanlah perangkap , tetapi ciri. Ia membolehkan percubaan bergerak yang cekap tanpa mempertaruhkan kestabilan program. Selain itu, tidak semua kod bergantung pada semantik bergerak, jadi membenarkan std::move untuk beroperasi pada objek malar memberikan fleksibiliti.
Atas ialah kandungan terperinci Mengapa Adakah `std::move` Berfungsi pada Objek Malar dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!