Rumah > pembangunan bahagian belakang > C++ > Adakah Kita Masih Melepasi Rujukan `std::string` dengan `const std::string&`?

Adakah Kita Masih Melepasi Rujukan `std::string` dengan `const std::string&`?

DDD
Lepaskan: 2024-12-10 00:27:16
asal
323 orang telah melayarinya

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

Obsolescence of Passing const std::string& Rujukan: Perspektif Herb Sutter

Dalam ceramah baru-baru ini, Herb Sutter menyatakan perkaitan yang semakin berkurangan lulus std::vector dan std::rentetan oleh const&. Beliau mencadangkan pendekatan tradisional:

std::string do_something(const std::string& inval)
Salin selepas log masuk

kini kurang diingini berbanding:

std::string do_something(std::string inval)
Salin selepas log masuk

Walaupun diakui bahawa inval mengekalkan saiznya, hujah Herb berpunca daripada senario yang melibatkan rantaian fungsi. Pertimbangkan contoh di mana A memanggil B, yang seterusnya memanggil C:

Kes 1: Melewati const Rujukan

void B(const std::string& str) { C(str); }
void C(const std::string& str) { /* Use str but do not store it */ }
Salin selepas log masuk

Apabila C memerlukan penyimpanan, operasi salinan menjadi perlu:

void C(const std::string& str) { m_str = str; }
Salin selepas log masuk

Walau bagaimanapun, penggunaan const& menghalang C daripada mengakses asas data dipindahkan ke parameternya.

Kes 2: Melepasi Nilai

void B(std::string str) { C(std::move(str)); }
void C(std::string str) { m_str = std::move(str); }
Salin selepas log masuk

Dalam senario ini, rentetan dialihkan melalui panggilan fungsi, mengelakkan salinan yang tidak diperlukan. Overhed prestasi untuk beralih ke nilai diimbangi oleh faedah mengelakkan peruntukan memori untuk rentetan kecil dengan Pengoptimuman Rentetan Pendek (SSO).

Akhirnya, pilihan antara lulus melalui rujukan const atau nilai bergantung pada penggunaan khusus kes dan keutamaan pembangun untuk kecekapan peruntukan memori berbanding kelemahan prestasi yang berpotensi.

Atas ialah kandungan terperinci Adakah Kita Masih Melepasi Rujukan `std::string` dengan `const std::string&`?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan