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
DDDasal
2024-12-10 00:27:16319semak imbas

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)

kini kurang diingini berbanding:

std::string do_something(std::string inval)

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 */ }

Apabila C memerlukan penyimpanan, operasi salinan menjadi perlu:

void C(const std::string& str) { m_str = str; }

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); }

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!

Kenyataan:
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