Adakah `std::vector` Dipindahkan Dari Dijamin Kosong?

Susan Sarandon
Lepaskan: 2024-11-18 03:04:02
asal
266 orang telah melayarinya

 Is a Moved-From `std::vector` Guaranteed to Be Empty?

Adakah Vektor Beralih Daripada Dijamin Kosong?

Secara amnya, piawaian C menyediakan panduan minimum tentang keadaan objek selepas mereka telah dipindahkan dari. Seperti yang dinyatakan dalam N3485 17.6.5.15 [lib.types.movedfrom]/1:

Objek jenis yang ditakrifkan dalam perpustakaan standard C boleh dialihkan daripada (12.8). Operasi alih mungkin dinyatakan secara eksplisit atau dijana secara tersirat. Melainkan dinyatakan sebaliknya, objek yang dialihkan daripada itu hendaklah diletakkan dalam keadaan yang sah tetapi tidak ditentukan.

Walaupun peruntukan ini tidak mengecualikan vektor daripada tertakluk kepada tingkah laku ini, ia memberi ruang untuk tafsiran.

Gelagat Khusus Vektor

Tiada keperluan standard eksplisit yang mengecualikan vektor daripada dipengaruhi oleh peraturan am untuk objek yang dialihkan. Walau bagaimanapun, memandangkan keperluan untuk pelaksanaan vektor, terdapat pilihan terhad:

Move Constructor:

  • Move constructor mesti mempunyai kerumitan yang berterusan.
  • Satu-satunya pilihan ialah mencuri sumber daripada vektor sumber (v) untuk membina vektor baharu, meninggalkan v kosong.

Operator Tugasan Pindah:

  • Tingkah laku bergantung pada pengagih vektor:

Kes Satu:

Kes Dua:

Kes Tiga:

Kesimpulan:

Untuk pembina bergerak vektor, vektor alih-dari sentiasa kosong. Untuk pengendali penugasan pindah, vektor alih-dari biasanya kosong, tetapi mungkin tidak berada dalam senario tertentu tertentu di mana pengalokasi tidak serasi dan T ialah MoveAssignable atau MoveInsertable.

Atas ialah kandungan terperinci Adakah `std::vector` Dipindahkan Dari Dijamin Kosong?. 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