我注意到当我像这样初始化数组时:
std::array<int,3> myarray;
myarray[0] = 9;
myarray[1] = 8;
myarray[2] = 7;
myarray[3] = 6;
myarray[4] = 5;
我没有收到错误,即使我的数组元素比 <int,3>
中定义的更多
我在 Mac 上使用 g++,它是 C++11。
所以我想我的问题是:为什么没有错误?这是正确的行为吗?还是我对我的编译器期望太多?
还有这个初始化方法叫什么?有人称之为“ buggy 建筑”。我认为他们只是在开玩笑。
附言我理解这个方法是undesirable .
编辑: 有些人建议我的问题是 duplicate .但根据 Vlad 的最佳答案,似乎并非如此。根据 Vlad 的说法,我的问题是关于运算符重载而不是 C 样式数组范围。我必须相信他的专业知识,他说的很有道理。
最佳答案
是undefined behavior .编译器不必警告您未定义的行为。
如果你真的想知道你什么时候超出了数组的边界那么使用at()
这将引发异常。
关于c++ - 为什么在初始化元素多于数组大小时的数组容器时不会出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155823/