Penentukan noexcept memastikan pengkompil bahawa move constructor tidak membuang pengecualian. Dengan melaksanakan pembina bergerak dengan noexcept, seperti yang dilihat dalam kod di bawah, pembina bergerak akan digunakan apabila vektor mengembang:
A(A && rhs) noexcept {
std::cout << "i am the move constr" <<std::endl;
... some code doing the move ...
m_value=std::move(rhs.m_value) ; // etc...
}
Salin selepas log masuk
Pendekatan ini sejajar dengan standard C, yang memerlukan jaminan pengecualian yang ketat untuk operasi dilakukan oleh std::vector.
Untuk kecekapan optimum, pertimbangkan untuk menggunakan kaedah emplace_back dan bukannya push_back, sebagai ia mengelakkan penyalinan yang tidak perlu. Perlu diingat bahawa versi awal Visual Studio 2015 dan lebih lama mungkin tidak menyokong ciri ini, walaupun menyokong semantik pergerakan.
Atas ialah kandungan terperinci Bagaimana Move Semantics Boleh Mengoptimumkan Peluasan Vektor dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!