Rumah >pembangunan bahagian belakang >C++ >Const std::map Akses: `operator[]` lwn. `at()` – Mana Yang Perlu Anda Gunakan?

Const std::map Akses: `operator[]` lwn. `at()` – Mana Yang Perlu Anda Gunakan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 17:26:14278semak imbas

Const std::map Access: `operator[]` vs. `at()` – Which Should You Use?

Mengakses Elemen dalam Peta Konst dengan Operator[] vs. at()

Apabila bekerja dengan std::map malar, mengakses elemen menggunakan operator[] boleh menjadi masalah. Walaupun ia mungkin kelihatan intuitif untuk menggunakan kaedah ini, ia gagal untuk menyusun. Ini kerana pengendali[] menjangkakan peta bukan const untuk mengubah suai peta jika kunci tidak wujud.

Walau bagaimanapun, terdapat kaedah alternatif, at(), yang diperkenalkan dalam C 11 khusus untuk tujuan ini. Tidak seperti operator[], at() melontarkan pengecualian std::out_of_range jika kunci tidak wujud, dan bukannya memasukkan elemen binaan lalai.

Tingkah laku ini sejajar dengan konsep peta malar. Dengan mentakrifkan kelebihan beban const at(), ia membenarkan akses yang selamat dan cekap kepada elemen tanpa potensi untuk pengubahsuaian yang tidak disengajakan.

Untuk menggambarkan, pertimbangkan contoh berikut:

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char> B = A;

    std::cout << B.at(3) << std::endl; // works
    std::cout << B[3] << std::endl;    // cannot access (compile error)
}

Dalam senario ini, menggunakan operator[] pada B akan mengakibatkan ralat masa kompilasi, kerana ia adalah peta const dan tidak boleh diubah suai. Walau bagaimanapun, kaedah at() berfungsi dengan sempurna kerana ia menyedari sifat const peta dan membuang pengecualian jika kunci tidak wujud.

Oleh itu, untuk mengakses elemen dalam const std::map, at() ialah pendekatan yang disyorkan dan lebih selamat untuk mengelakkan pengubahsuaian yang tidak diingini. Maklumat lanjut tentang ciri ini boleh didapati dalam piawaian C 11 atau dokumentasi yang berkaitan dengan kelas std::map.

Atas ialah kandungan terperinci Const std::map Akses: `operator[]` lwn. `at()` – Mana Yang Perlu Anda Gunakan?. 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