使用标准异常类

时间:2011-10-05 13:51:24

标签: c++

我试图在c ++中使用标准异常类,如:

#include <iostream>
#include <exception>
using namespace std;
int main(){
    int a[6]={12,3,2,4,5,6};
    int n=6;
    try{
     cout<<a[6]<<"  ";

    }
    catch(std::exception & exc)
     {
         cout<<exc.what();

     }

     return 0;  
    }

但是没有向我显示错误 - “超出索引”,它会抛出运行时错误,说“变量a未初始化”,为什么?我已将其声明为数组并对其进行初始化。请给我一些建议,为什么会这样做?

5 个答案:

答案 0 :(得分:14)

访问a[6]是未定义的行为,因为a的唯一有效索引是0 .. 5

您不应期望a[6]执行任何边界检查,更不用说在越界数组访问上抛出C ++异常。

如果您想要自动边界检查,请将a设为std::vector<int>并使用a.at(index)访问其元素。

答案 1 :(得分:4)

标准数组不会检查您的访问范围。如果你想要一个绑定的检查数组,你可以使用boost/std::arraystd::vector并使用绑定的安全访问函数at()

答案 2 :(得分:2)

您已将a声明为包含六个元素的数组;合法索引从0到5运行。表达式a[6]的结果是未定义的行为 - 程序终止(在这种情况下)是结果。没有任何地方说非法数组访问会引发异常 - 这不是Java!

答案 3 :(得分:2)

c ++不检查数组大小,因此不会抛出异常。如果要进行此检查,则必须使用STD容器,如std :: vector。

答案 4 :(得分:2)

C ++异常并不意味着用于捕获编程错误。它们存在运行时错误,例如无法打开文件等。