Tugasan Pergerakan Diri dan Perpustakaan Standard
Dalam C 11, perpustakaan standard menyediakan jaminan tertentu berkenaan tugasan bergerak sendiri. Mengikut piawaian, jika argumen fungsi terikat pada parameter rujukan nilai, pelaksanaan boleh menganggap bahawa parameter itu adalah rujukan unik kepada hujah tersebut.
Pertimbangkan fungsi berikut:
template<class T> std::vector<T> selfAssign(std::vector<T> v) { v = std::move(v); return v; }
Memandangkan hujah vektor terikat pada parameter rujukan rvalue, pelaksanaan std::vector
Piawaian menentukan bahawa parameter rujukan rnilai boleh diandaikan sebagai nilai, sekali gus menghalang kemungkinan penugasan bergerak sendiri dalam kes sebegini. Besar kemungkinan vektor yang dihantar kepada fungsi selfAssign akan dibiarkan dalam keadaan tanpa sumber atau menjalani larangan jika ia sudah mempunyai kapasiti 0.
Walau bagaimanapun, draf kerja terkini bagi standard, N4618 , mengubah sedikit keperluan ini. Secara khusus, ia menyatakan bahawa, jika t dan rv tidak merujuk kepada objek yang sama, maka selepas tugasan 't = rv', t mungkin hanya perlu mengandungi nilai setara rv sebelum tugasan. Walau apa pun, keadaan rv kekal tidak dinyatakan selepas tugasan.
Atas ialah kandungan terperinci Adakah Tugasan Pergerakan Sendiri Mungkin dengan Parameter Rujukan Rvalue dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!