我有一个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
}
Run Code Online (Sandbox Code Playgroud)
kgr*_*ney 38
STL向量在.at()调用成员函数时执行边界检查,但不对[]运算符执行任何检查.
当超出范围时,[]运算符会产生未定义的结果.
如kgraney的回答所述,这是未定义的行为.但是,大多数c ++库都有一些中止功能,或者在这种情况下引发异常.通常通过设置或取消设置特定的编译器宏来控制.
我概述了相关文档:
_SCL_SECURE_NO_WARNINGS - 不太安全(根据microsoft),但更符合标准:
_SECURE_SCL - 设置迭代器调试级别的旧方法
请注意,gnu和clang默认禁用检查,而microsoft默认启用它们.如果您不知道这一点,那么在Microsoft系统上的调试模式下,您的代码可能会运行得非常慢.
| 归档时间: |
|
| 查看次数: |
11230 次 |
| 最近记录: |