我有一個std::vector。我檢查它的大小是6,但是當我嘗試訪問vec[6]它是否會給出錯誤時,我沒有看到任何錯誤,但是得到了一些數字。它不應該給出錯誤嗎?編輯:類似:struct Element{ std::vector<double> face;};int main(){ Element elm; .... // insert 6 elements into elm.face std::cout << elm.face.size() << std::endl; // answer is 6 std::cout << elm.face[6] << std::endl; // answer is some number}
3 回答

開滿天機
TA貢獻1786條經驗 獲得超13個贊
如kgraney的回答所述,這是不確定的行為。但是,大多數c ++庫在某些情況下具有中止或引發異常的功能。通常通過設置或取消設置特定的編譯器宏來控制。
我已經對相關文檔進行了概述:
gnu libstdc ++
調試模式 -有關libstdc ++調試的常規信息
_GLIBCXX_DEBUG
帶有-fconcepts的_GLIBCXX_CONCEPT_CHECKS-啟用c ++概念
langlibcxx
_LIBCPP_DEBUG_LEVEL = 1
促進
BOOST_DISABLE_ASSERTS-禁用Boost庫中的斷言
微軟
選中的迭代器
_ITERATOR_DEBUG_LEVEL-設置迭代器調試級別
CRT中的安全功能
_CRT_SECURE_NO_WARNINGS:禁用棄用警告
_SCL_SECURE_NO_WARNINGS-安全性較低(根據Microsoft),但更符合標準:
_SECURE_SCL-設置迭代器調試級別的舊方法
_HAS_ITERATOR_DEBUGGING-已棄用的宏
請注意,默認情況下,gnu和clang禁用檢查,而Microsoft默認情況下將其啟用。如果您不知道這一點,您的代碼在Microsoft系統上的調試模式下運行可能會明顯變慢。
- 3 回答
- 0 關注
- 392 瀏覽
添加回答
舉報
0/150
提交
取消