Rumah > pembangunan bahagian belakang > C++ > Adakah tugasan gerak sendiri berfungsi dengan `std::vector` dalam Pustaka Standard C?

Adakah tugasan gerak sendiri berfungsi dengan `std::vector` dalam Pustaka Standard C?

Barbara Streisand
Lepaskan: 2024-11-11 17:23:03
asal
247 orang telah melayarinya

Does self-move assignment work with `std::vector` in the C   Standard Library?

Tugasan Pergerakan Kendiri dalam Perpustakaan Standard C

Dalam C 11, piawaian menyediakan jaminan tertentu mengenai tugasan bergerak sendiri, terutamanya dalam standard perpustakaan. Mari kita siasat apakah jaminan tersebut.

Menurut Seksyen 17.6.4.9 piawai C 11, di bawah topik "Argumen Fungsi", dinyatakan bahawa jika argumen fungsi terikat pada parameter rujukan nilai, pelaksanaan boleh menganggap bahawa rujukan ini adalah eksklusif untuk hujah.

Ini membayangkan bahawa dalam pelaksanaan std::vector::operator=(vector&& other), adalah dibenarkan untuk menganggap bahawa yang lain ialah satu nilai. Akibatnya, jika yang lain adalah prvalue, tugasan bergerak sendiri tidak boleh dilaksanakan.

Apa yang mungkin berlaku ialah v akan diberikan tanpa sumber (dengan kapasiti sifar). Tindakan ini akan menjadi larangan jika v sudah mempunyai kapasiti sifar.

Kemas kini:

Draf kerja terkini (N4618) menawarkan definisi yang lebih tepat bagi Keperluan MoveAssignable. Ia menyatakan bahawa ungkapan t = rv (di mana rv ialah nilai r) memerlukan t hanya sepadan dengan nilai rv sebelum tugasan jika ia tidak merujuk kepada objek yang sama. Walau apa pun, keadaan rv menjadi tidak ditentukan selepas tugasan. Nota tambahan memberikan penjelasan lanjut:

"rv mesti masih memenuhi keperluan komponen perpustakaan yang menggunakannya, sama ada t dan rv merujuk kepada objek yang sama atau tidak."

Atas ialah kandungan terperinci Adakah tugasan gerak sendiri berfungsi dengan `std::vector` dalam Pustaka Standard C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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