Mahukan Kelajuan? Nilai Lulus: Pertimbangan Prestasi
Prinsip "Mahukan kelajuan? Lulus nilai" mencadangkan bahawa menghantar hujah mengikut nilai kadangkala boleh meningkatkan prestasi disebabkan penyingkiran salinan. Untuk menggambarkan, pertimbangkan kod berikut menggunakan kelas X dan Y:
<code class="cpp">struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} }; int main() { X(foo()); Y(foo()); }</code>
Di sini, foo() mengembalikan rentetan sementara yang dihantar kepada kedua-dua pembina X dan Y. Apabila X memulakan mem_name, ia memanggil pembangun bergerak std::string, yang berpotensi mengelakkan penyalinan rentetan. Walau bagaimanapun, apabila Y memulakan nama_mem, ia mesti menyalin rujukan rentetan.
Argumen Lvalue vs Rvalue:
Jika nilai l (bukan sementara) diluluskan, kedua-dua X dan Y akan melakukan salinan. Selain itu, X akan melakukan gerakan. Untuk nilai r (sementara), X hanya boleh melakukan satu pergerakan, manakala Y masih mesti melakukan salinan.
Implikasi Prestasi:
Secara amnya, pergerakan lebih cepat daripada berlalu penunjuk (bersamaan dengan lulus dengan rujukan). Oleh itu, X mempunyai prestasi yang serupa dengan Y untuk nilai dan prestasi yang lebih baik untuk nilai.
Awas:
Walaupun "Mahukan kelajuan? Lulus nilai" ialah idea yang menarik, ia harus diaplikasikan secara bijaksana. Adalah penting untuk mempertimbangkan konteks khusus dan potensi overhed yang berkaitan dengan penyalinan struktur data yang besar. Pemprofilan disyorkan untuk menentukan kesan prestasi sebenar.
Sumber Tambahan:
Atas ialah kandungan terperinci Mahukan Kelajuan? Nilai Lulus: Adakah Copy Elision Sentiasa Pemenang Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!