Tugasan Pergerakan Kendiri dalam Bekas Perpustakaan Standard
Piawaian C 11 menjamin bahawa tugasan bergerak sendiri (pemberian objek kepada dirinya sendiri selepas ia mempunyai telah dialihkan daripada) tidak mungkin untuk bekas perpustakaan standard seperti std::vector.
Peruntukan khusus dalam piawaian terdapat dalam [res.on.arguments], yang menyatakan bahawa argumen fungsi yang terikat pada rujukan nilai adalah dianggap rujukan unik kepada hujah terikat mereka. Ini bermakna pelaksanaan boleh mengandaikan bahawa hujah tidak merujuk kepada objek yang sama seperti sasaran tugasan.
Dalam kes std::vector, operator penugasan pindah (operator=) ditakrifkan kepada ambil rujukan nilai. Oleh itu, apabila selfAssign() dipanggil dengan argumen std::vector, piawaian membenarkan pelaksanaan untuk menganggap bahawa hujah adalah rujukan unik kepada objek sementara. Akibatnya, tugasan bergerak sendiri tidak dapat dilakukan dan std::vector akan dibiarkan dalam keadaan tanpa sumber (0 kapasiti).
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini hanya dijamin untuk bekas perpustakaan standard. Untuk jenis yang ditakrifkan pengguna, piawaian C 11 tidak memberikan sebarang jaminan mengenai tugasan bergerak sendiri.
Atas ialah kandungan terperinci Mengapa Tugasan Self Move Tidak Dibenarkan untuk Bekas Perpustakaan Standard dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!