矢量越界而不给出错误

我有一个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

}


翻阅古今
浏览 366回答 3
3回答

开满天机

如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系统上的调试模式下运行可能会明显变慢。

森栏

这是未定义的行为。未定义的行为并不一定意味着您会得到一个错误:您可能会错,但您可能会得到一些没有太大意义的结果。
打开App,查看更多内容
随时随地看视频慕课网APP