Rumah >pembangunan bahagian belakang >C++ >RVO lwn. Pergerakan Eksplisit dalam C 11: Bilakah Saya Harus Menggunakan Yang Mana?
Pengoptimuman Nilai Pulangan lwn. Pergerakan Eksplisit dalam C 11: Mana yang Perlu Digunakan?
Dalam C 11, pembangun mempunyai pilihan untuk meningkatkan prestasi melalui dua teknik: Pengoptimuman Nilai Pulangan (RVO) dan operasi pergerakan eksplisit menggunakan std::move. Apabila mempertimbangkan pendekatan yang hendak digunakan, adalah penting untuk memahami perbezaan dan kebolehgunaan masing-masing.
Pengoptimuman Nilai Pulangan (RVO)
RVO ialah teknik pengoptimuman yang dilaksanakan oleh pengkompil yang menghapuskan operasi penyalinan yang tidak perlu. Apabila pernyataan pemulangan fungsi melibatkan objek yang hayatnya tamat serta-merta selepas pelaksanaan fungsi, pengkompil boleh mengoptimumkan salinan dengan mengembalikan nilai objek secara langsung, dengan itu mengelakkan pembinaan dan pemusnahannya.
Pergerakan Eksplisit Operasi
Operasi gerak eksplisit menggunakan std::move memaksa pengkompil untuk memindahkan pemilikan objek dan bukannya menyalinnya. Ini dicapai dengan menghantar objek sebagai rujukan rvalue dan kemudian menggunakan std::move pada nilai pulangannya.
Pendekatan Mana yang Perlu Digunakan?
Apabila memilih antara RVO dan langkah eksplisit, sentiasa mengutamakan penggunaan RVO. Copy elision ialah pengoptimuman pengkompil yang sangat berkesan yang boleh meningkatkan prestasi dengan ketara.
Seperti yang ditunjukkan dalam coretan kod yang disediakan, fungsi yang dibaca boleh mengembalikan SerialBuffer menggunakan RVO:
SerialBuffer read(size_t size) const { SerialBuffer buffer(size); read(begin(buffer), end(buffer)); return buffer; }
Secara lalai, pengkompil akan mengoptimumkan operasi pemulangan, menghapuskan keperluan untuk menyalin jika mungkin.
Operasi pergerakan eksplisit hanya boleh digunakan apabila RVO tidak boleh digunakan. Sebagai contoh, jika jangka hayat objek melangkaui pelaksanaan fungsi, menggunakan std::move secara eksplisit boleh menandakan niat untuk memindahkan pemilikan objek. Walau bagaimanapun, ini sepatutnya menjadi senario yang jarang berlaku dan RVO secara amnya sepatutnya mencukupi.
Atas ialah kandungan terperinci RVO lwn. Pergerakan Eksplisit dalam C 11: Bilakah Saya Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!