Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::vector` `operator[]` Membenarkan Capaian Di Luar Sempadan Tanpa Ralat?

Mengapakah `std::vector` `operator[]` Membenarkan Capaian Di Luar Sempadan Tanpa Ralat?

Barbara Streisand
Barbara Streisandasal
2024-12-07 11:06:13896semak imbas

Why Does `std::vector`'s `operator[]` Allow Out-of-Bounds Access Without Error?

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!

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