我来自Java,目前在学习C++。我正在使用Stroustrup的C++编程原理与实践。现在我正在使用向量进行操作。他在第117页上说,访问向量中不存在的元素会导致运行时错误(与Java中一样,索引越界)。我正在使用MinGW编译器,当我编译和运行以下代码时:
#include <iostream>
#include <cstdio>
#include <vector>
int main()
{
std::vector<int> v(6);
v[8] = 10;
std::cout << v[8];
return 0;
}
它输出了10。更有趣的是,如果我不修改不存在的向量元素(我只是打印它,希望会出现运行时错误或至少是默认值),它会打印一些大整数。那么... Stroustrup错了,还是GCC编译C++的方式有些奇怪?
v.at(8)
会导致运行时异常。 - JaredCstd::vector<>
的数组运算符,它可能会为您的问题提供一些启示,特别是缺少边界检查(成员at()
确实会执行)。您的代码目前存在未定义行为。 - WhozCraig