Rumah > pembangunan bahagian belakang > C++ > Adakah Kita Masih Melepasi `std::string` dan `std::vector` oleh `const &`?

Adakah Kita Masih Melepasi `std::string` dan `std::vector` oleh `const &`?

Barbara Streisand
Lepaskan: 2024-12-10 13:54:11
asal
1016 orang telah melayarinya

Should We Still Pass `std::string` and `std::vector` by `const &`?

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;
}
Salin selepas log masuk

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:

  • Encapsulation: Fungsi yang mengambil rujukan menjelaskan bahawa ia tidak mengubah suai objek asal.
  • Kerumitan yang dikurangkan: Parameter rujukan memudahkan kod dengan menghapuskan keperluan untuk mempertimbangkan pemilikan dan seumur hidup pengurusan.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan