Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::vector` `operator[]` Membenarkan Capaian Di Luar Sempadan Tanpa Ralat?
std::Akses Vektor Tanpa Ralat Walaupun Di Luar Had
Dalam std::vector, akses menggunakan operator[] tidak mencetuskan ralat laporan, walaupun apabila indeks berada di luar batasan. Ini boleh membawa kepada hasil yang tidak dijangka.
Pertimbangkan contoh berikut:
struct Element { std::vector<double> face; }; int main() { Element elm; // Insert 6 elements into elm.face for (int i = 0; i < 6; i++) elm.face.push_back(i); std::cout << elm.face.size() << std::endl; // Prints 6 std::cout << elm.face[6] << std::endl; // Prints an arbitrary number }
Seperti yang ditunjukkan, saiz vektor ialah 6, tetapi mengakses elm.face indeks yang tidak wujud[6] menghasilkan bukan -tindak balas ralat. Keputusan ini ialah tingkah laku yang tidak ditentukan dan nilai yang dikembalikan boleh berbeza-beza bergantung pada platform dan pengurusan memori.
Sebaliknya, menggunakan at() untuk mengakses elemen melakukan semakan sempadan dan melontar pengecualian (std::out_of_range) apabila indeks berada di luar batasan. Oleh itu, adalah disyorkan untuk menggunakan at() dan bukannya operator[] apabila anda memerlukan semakan sempadan.
Atas ialah kandungan terperinci Mengapakah `std::vector` `operator[]` Membenarkan Capaian Di Luar Sempadan Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!