Rumah > pembangunan bahagian belakang > C++ > Bagaimana Saya Boleh Memaksa std::vector untuk Menggunakan Move Semantics Semasa Pertumbuhan?

Bagaimana Saya Boleh Memaksa std::vector untuk Menggunakan Move Semantics Semasa Pertumbuhan?

Susan Sarandon
Lepaskan: 2024-12-21 13:51:10
asal
619 orang telah melayarinya

How Can I Force std::vector to Use Move Semantics During Growth?

Menguatkuasakan Semantik Pergerakan Semasa Pertumbuhan Vektor

Apabila std::vektor dengan elemen bukan remeh yang mempunyai pembina salinan dan gerakkan yang ditentukan berkembang, tingkah laku lalai adalah menggunakan pembina salinan untuk mencipta salinan elemen baharu. Untuk menguatkuasakan penggunaan pembina bergerak sebaliknya, C mesti dimaklumkan bahawa pembina ini tidak membuang pengecualian.

Pelaksanaan

Untuk menunjukkan bahawa pembina bergerak boleh dipanggil dengan selamat, isytiharkannya dengan penentu noexcept:

A(A &&rhs) noexcept { 
  std::cout << "i am the move constr" << std::endl;
  ... move-assignment code ... 
}
Salin selepas log masuk

Dengan pengubahsuaian ini, std::vector akan mengutamakan penggunaan pembina langkah untuk pertumbuhan, memastikan sumber elemen sedia ada dipindahkan dan bukannya disalin.

Maklumat Tambahan

  • Untuk pemahaman yang lebih mendalam , rujuk artikel "C Move semantics and Exceptions."
  • Pertimbangkan untuk menggunakan emplace_back dan bukannya push_back apabila boleh, kerana ia boleh menawarkan prestasi dan kejelasan yang lebih baik.
  • Meminta semantik alih secara eksplisit menggunakan A(A &&rhs) = lalai; boleh memastikan pembina bergerak ditandakan sebagai noexcept apabila boleh. Sesetengah versi Visual Studio yang terdahulu mungkin tidak menyokong sepenuhnya ciri ini.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Memaksa std::vector untuk Menggunakan Move Semantics Semasa Pertumbuhan?. 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