Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jangan tetapkan
gsl::spanataustd::string_viewke referensi. Mereka murah untuk dibangun dan bukan pemilik data yang mendasar. (gsl.view)
Referensi ke gsl::span atau std::string_view mungkin merupakan indikasi masalah seumur hidup.
Panduan Inti C++
Aturan ini menangkap masalah masa pakai halus yang mungkin terjadi dalam kode yang dimigrasikan dari kontainer standar ke rentang baru dan jenis tampilan. Jenis tersebut dapat dianggap sebagai "referensi ke buffer." Menggunakan referensi ke rentang atau tampilan membuat lapisan tambahan tidak langsung. Ketidaktersediaan seperti itu sering kali tidak perlu dan dapat membingungkan bagi pemeliharaan. Rentang murah untuk disalin dan dapat dikembalikan oleh nilai dari panggilan fungsi. Jelas, hasil panggilan seperti itu tidak boleh dirujuk.
Keterangan
- Aturan mendeteksi referensi ke gsl::span<>, gsl::basic_string_span<>, dan std::basic_string_view<> (termasuk alias untuk instansiasi).
- Saat ini peringatan dipancarkan hanya pada pernyataan deklarasi dan pengembalian. Aturan ini dapat diperluas di masa mendatang untuk juga menandai parameter fungsi.
- Implementasi aturan ini ringan tidak mencoba melacak masa pakai aktual. Penggunaan referensi mungkin masih masuk akal dalam beberapa skenario. Dalam kasus seperti itu, positif palsu dapat dengan aman ditekan.
Nama analisis kode: NO_SPAN_REF
Contoh
Referensi ke sementara:
// Old API - uses string reference to avoid data copy.
const std::string& get_working_directory() noexcept;
// New API - after migration to C++17 it uses string view.
std::string_view get_working_directory() noexcept;
// ...
// Client code which places an explicit reference in a declaration with auto specifier.
const auto &wd = get_working_directory(); // C26445 after API update.