我有一个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 关注
- 365 浏览
添加回答
举报
0/150
提交
取消