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中文網其他相關文章!