Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Barbara Streisandasal
2024-11-11 17:23:03165semak imbas

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:
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