当我运行程序从只有4大小的数组中获取第5个元素时,我得到的是垃圾值,而不是数组中的绑定异常。数组的长度不是在VC++运行时得到验证的吗?
发布于 2013-10-07 08:13:11
C++有带绑定检查的数组,但不使用[]。std::array<T, N>::at(i)将检查这个0 <= i < N,并抛出一个std::out_of_range异常。
std::vector<T>是数组的可变长度等效项,并提供了相同的at()方法.当然,这使用当前向量长度,而不是硬编码的N。
发布于 2013-10-07 06:06:39
在C++中,读取数组的结尾会导致未定义的行为,这意味着几乎任何事情都可能发生--您可能会得到垃圾、可能获得有效数据、可能触发调试断言或异常等等。然而,您不应该依赖任何特定的事情发生。使用C++的挑战之一是学习检查数组索引,因为在C++中,语言不会为您做任何事情,这在很大程度上是事实。
希望这能有所帮助!
发布于 2013-10-07 06:14:17
普通数组不执行边界检查。如果您想这样做,请使用std::vector代替。它的[]操作符不执行边界检查,但它的at()方法会在访问无效索引时抛出std::out_of_range异常。
https://stackoverflow.com/questions/19218042
复制相似问题