首頁 > 後端開發 > C++ > 為什麼 `std::vector` 的 `operator[]` 允許越界存取而不會出錯?

為什麼 `std::vector` 的 `operator[]` 允許越界存取而不會出錯?

Barbara Streisand
發布: 2024-12-07 11:06:13
原創
880 人瀏覽過

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

std::Vector 越界存取沒有錯誤

在std::vector 中,使用operator[]存取不會觸發錯誤報告,即使索引超出範圍。這可能會導致意外結果。

考慮以下範例:

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
}
登入後複製

如圖所示,向量大小為 6,但存取不存在的索引 elm.face[6] 會產生一個非- 錯誤回應。這個結果是未定義的行為,回傳的值可能會因平台和記憶體管理而異。

相反,使用 at() 存取元素會執行邊界檢查,並在下列情況下拋出例外狀況 (std::out_of_range):索引超出範圍。因此,當需要進行邊界檢查時,建議使用at()而不是operator[]。

以上是為什麼 `std::vector` 的 `operator[]` 允許越界存取而不會出錯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板