首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的长度不是在VC++运行时得到验证的吗?

数组的长度不是在VC++运行时得到验证的吗?
EN

Stack Overflow用户
提问于 2013-10-07 06:04:55
回答 4查看 91关注 0票数 1

当我运行程序从只有4大小的数组中获取第5个元素时,我得到的是垃圾值,而不是数组中的绑定异常。数组的长度不是在VC++运行时得到验证的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2013-10-07 06:06:39

在C++中,读取数组的结尾会导致未定义的行为,这意味着几乎任何事情都可能发生--您可能会得到垃圾、可能获得有效数据、可能触发调试断言或异常等等。然而,您不应该依赖任何特定的事情发生。使用C++的挑战之一是学习检查数组索引,因为在C++中,语言不会为您做任何事情,这在很大程度上是事实。

希望这能有所帮助!

票数 6
EN

Stack Overflow用户

发布于 2013-10-07 06:14:17

普通数组不执行边界检查。如果您想这样做,请使用std::vector代替。它的[]操作符不执行边界检查,但它的at()方法会在访问无效索引时抛出std::out_of_range异常。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19218042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档