Rumah > pembangunan bahagian belakang > C++ > Mengapa Tugasan Self Move Tidak Dibenarkan untuk Bekas Perpustakaan Standard dalam C 11?

Mengapa Tugasan Self Move Tidak Dibenarkan untuk Bekas Perpustakaan Standard dalam C 11?

Patricia Arquette
Lepaskan: 2024-11-16 02:49:03
asal
411 orang telah melayarinya

Why is Self Move Assignment Not Allowed for Standard Library Containers in C  11?

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan