如果索引超出范围 [duplicate],为什么 C++ 数组会返回一个值

Why does an C++ array return a value if the index is out of range [duplicate]

提问人:user3443063 提问时间:11/14/2023 更新时间:11/14/2023 访问量:61

问:

为什么此示例代码有效?

我希望它在计算 val3 和 val4 时会失败(或崩溃?相反,它给了我

  • val1=19(预期)

  • val2=11(预期)

  • val3=56(为什么???)

  • val4= 0(为什么???)

    const int myA[128] = {11,12,13,14,15,16,17,18,19,20  };
    
     int val1= myA[8];
     int val2= myA[0];
     int val3= myA[-8];
     int val4= myA[888];
    
C++ 数组

评论

2赞 Paul Sanders 11/14/2023
将数组越界索引是未定义的行为,您无法预测会发生什么。
1赞 463035818_is_not_an_ai 11/14/2023
你认为它为什么会起作用?一个带有元素的数组在索引处没有元素,因此访问该元素不能“工作”128888
2赞 πάντα ῥεῖ 11/14/2023
“我希望它失败(或崩溃?UB不保证这样的事情。现代编译器警告可能会有所帮助。
4赞 πάντα ῥεῖ 11/14/2023
此外,c++ 数组可以更好地表示为,并且您可以使用该函数进行调试构建进行边界检查。std::array<T,Size>at(index)
0赞 doug 11/15/2023
测试索引以查看它们是否在范围内会减慢代码速度,并且用户应该确保所有访问都在范围内。C++ 不会减慢执行速度以检查用户是否知道他们在做什么,除非您显式使用该成员执行类似 和at()std::vectorstd::array

答: 暂无答案