Rumah >pembangunan bahagian belakang >C++ >Push_back vs. Emplace_back: Bilakah Anda Harus Menggunakan Setiap dalam C ?
Push_back vs Emplace_back: Analisis Yang Lebih Dalam
Pengenalan
Perbezaan antara push_back dan emplace_back operasi dalam C sering menjadi punca kekeliruan. Kedua-dua fungsi digunakan untuk memasukkan elemen ke dalam bekas, tetapi ia berbeza dalam kelakuannya, terutamanya apabila bekerja dengan rujukan nilai.
Memahami Push_back
push_back mempunyai tiga lebihan: satu mengambil nilai const, satu mengambil rujukan rnilai, dan satu lagi yang mengambil bilangan hujah variadic (C 11 seterusnya). Dalam konteks rujukan rvalue, push_back(Type&& _Val) berkelakuan seperti yang diharapkan: ia terus memasukkan rujukan rvalue ke dalam bekas tanpa membuat salinan.
Emergence of Emplace_back
Microsoft Visual C (MSVC) memperkenalkan versi yang kelihatan berlebihan emplace_back yang mengambil rujukan rnilai: emplace_back(Jenis&& _Val). Lebihan beban ini berlebihan kerana fungsinya bersamaan dengan push_back(Jenis&& _Val) apabila digunakan dengan rujukan nilai.
Kuasa Sebenar Emplace_back
Yang benar potensi emplace_back terletak pada beban variadicnya: emplace_back(Args&&...). Tidak seperti push_back, beban berlebihan ini membenarkan pembinaan langsung objek dalam bekas menggunakan argumen yang dimajukan. Ini menghapuskan keperluan untuk mencipta objek sementara dan potensi untuk penyalinan yang tidak perlu.
Bila Menggunakan Emplace_back
emplace_back amat berguna dalam situasi di mana mencipta objek sementara akan dikenakan bayaran yang ketara atas kepala. Contohnya, apabila memasukkan objek kompleks ke dalam peta standard:
std::map<int, Complicated> m; int anInt = 4; double aDouble = 5.0; std::string aString = "C++"; // Avoids creating temporary objects m.emplace(4, anInt, aDouble, aString);
Pelaksanaan Separa MSVC
Walaupun memperkenalkan lebihan emplace_back bukan standard untuk rujukan nilai, MSVC masih belum melaksanakan versi variadic penuh. Sebab di sebalik ini ialah kekurangan sokongan templat variadic dalam Visual C 10 pada masa itu.
Atas ialah kandungan terperinci Push_back vs. Emplace_back: Bilakah Anda Harus Menggunakan Setiap dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!