c++ - 为什么在初始化元素多于数组大小时的数组容器时不会出现错误?

标签 c++ arrays c++11 operator-overloading

我注意到当我像这样初始化数组时:

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/

相关文章:

python - 创建多维零点 Python

c++ - 使用 boost::interprocess 在共享内存中分配用户定义的结构

c++ - 为什么有些包含文件只驻留在 tr1 中?

c++ - 使用 BLAS 和 LAPACKE 在 C++ 中使用 SVD 计算伪逆

c++ - 另一个与设计相关的 C++ 问题

将 char 数组中的单词转换为包含单个空格的行

python - 将零添加到长 Numpy 数组

c++ - 如何检查可变参数模板中的非原始类型?

c++ - 转发声明 typedef 的结构

c++ - 具有多个 WSDL 的 gSoap