Membaiki Konvensyen Lulus Parameter untuk Pengoptimuman
Dalam ceramah baru-baru ini, Herb Sutter mencadangkan supaya lulus std::vector dan std::string objects oleh const & semakin usang. Tuntutan ini telah mencetuskan perbincangan dalam kalangan pengaturcara.
Rasional Sutter
Sutter berhujah bahawa dalam kes di mana fungsi mengembalikan nilai r (iaitu, objek sementara), menghantar input parameter mengikut nilai membolehkan pengendalian yang lebih cekap menggunakan semantik bergerak. Ini mengelakkan salinan atau peruntukan memori yang tidak diperlukan.
Pertimbangkan coretan kod berikut:
std::string do_something ( std::string inval ) { std::string return_val; // ... do stuff ... return return_val; }
Meluluskan inval mengikut nilai membolehkan fungsi mengubah suai dan mengembalikan nilai secara langsung, menghapuskan keperluan untuk salinan pembina.
Kebimbangan tentang Kecekapan
Pengkritik berpendapat bahawa menghantar objek besar seperti std::string mengikut nilai masih boleh menjadi tidak cekap kerana overhed menggerakkan objek. Contoh std::string terdiri daripada beberapa komponen, termasuk penuding timbunan dan char ahli[] untuk pengoptimuman rentetan pendek.
Argumen untuk Parameter Rujukan
Walaupun potensi ketidakcekapan, penyokong parameter rujukan berpendapat bahawa mereka menawarkan beberapa faedah:
Kesimpulan
Pilihan sama ada untuk menghantar objek mengikut const & atau mengikut nilai bergantung pada kes penggunaan tertentu. Dalam situasi di mana kecekapan adalah kritikal dan fungsi beroperasi pada rnilai, lulus mengikut nilai dengan semantik bergerak boleh memberikan faedah prestasi. Walau bagaimanapun, dalam kes di mana pengkapsulan, kesederhanaan atau pengurusan pemilikan adalah penting, parameter rujukan kekal berharga.
Atas ialah kandungan terperinci Adakah Kita Masih Melepasi `std::string` dan `std::vector` oleh `const &`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!