Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah std::move() menukar lvalues kepada rvalues dalam C ?
Pemahaman Lanjutan tentang Penukaran std::move kepada Rvalues
Dalam C , std::move() memainkan peranan penting dalam menukar ungkapan kepada rnilai (rujukan nilai kanan). Walau bagaimanapun, pelaksanaannya boleh mengelirukan untuk difahami. Artikel ini bertujuan untuk memberikan pemahaman yang jelas tentang fungsi pergerakan dan kelakuannya dengan kedua-dua nilai dan nilai.
Pelaksanaan std::move()
std ::move() fungsi, seperti yang dilaksanakan dalam perpustakaan standard MSVC, mengambil hujah rujukan rvalue (&&) dan mengembalikan rujukan rvalue. Ini membolehkan std::move() mengendalikan kedua-dua lvalues (rujukan nilai kiri) dan rvalues dengan berkesan.
Rvalue Binding
Apabila std::move() adalah dipanggil dengan rvalue, seperti objek sementara, parameter rujukan _Arg mengikat terus kepada rvalue. Ini adalah mudah kerana rujukan rvalue boleh mengikat kepada rvalue.
Lvalue Binding
Apabila std::move() dipanggil dengan lvalue, parameter rujukan _Arg mengikat kepada rujukan nilai (Objek&). Ini menimbulkan persoalan bagaimana rujukan rnilai boleh mengikat kepada nilai.
Rujukan Runtuh
Untuk memahami kelakuan ini, kita perlu mempertimbangkan peraturan C 11 untuk keruntuhan rujukan . Peraturan ini menyatakan bahawa:
Object & & = Object & Object & && = Object & Object && & = Object & Object && && = Object &&
Menurut peraturan ini, Object& && adalah bersamaan dengan Object&, yang merupakan rujukan lnilai biasa yang boleh mengikat kepada lvalues.
Kesan remove_reference
std::move() menggunakan std::remove_reference untuk mengalih keluar sebarang rujukan sedia ada daripada jenis hujah, menghasilkan nama taip tr1::_Remove_reference
Kelebihan Pelaksanaan
Pelaksanaan std:: move() menawarkan beberapa kelebihan:
Kesimpulan
std::move()'s pelaksanaan direka dengan rumit untuk menukar ungkapan kepada rvalues dengan berkesan, mengendalikan kedua-dua nilai dan nilai dengan rujukan runtuh dan memastikan jenis pulangan rujukan nilai yang konsisten. Mekanisme ini memainkan peranan penting dalam penggunaan semantik bergerak dalam C .
Atas ialah kandungan terperinci Bagaimanakah std::move() menukar lvalues kepada rvalues dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!