编程:使用C ++第二版的原理和实践,第5章练习-预期时程序不会引发异常

时间:2018-10-17 22:55:14

标签: c++ error-handling outofrangeexception

在Stroustrup的书中,第5章练习有一个小程序,您可以在其中插入具有有目的错误的选择,以便更好地理解错误处理。插入内容之一如下:

vector<char> v(5); for (int i=0; i<=v.size(); ++i) ; cout << "Success!\n";

放置在较大的代码中,如下所示:

#include "std_lib_facilities.h"

int main()
  try {
    vector<char> v(5);
    for (int i=0; i<=v.size(); ++i) ;
    cout << "Success!\n";
    return 0;
  }
  catch (exception& e){
    cerr<<"error: "<<e.what()<<'\n';
    return 1;
  }
  catch (...){
    cerr<<"Oops: unknown exception!\n";
    return 2;
  }

我可以修复代码。要解决此问题,我删除了for语句中间的不正确的分号,并且表面上将更改为for语句中的<=到<运算符,以免导致范围错误。这将编译并打印5个“成功!”。到终端。

问题是,如果我修改程序以保留范围错误以了解如何处理该错误,那么我仍然不会遇到异常。例如,如果我只是删除分号并保留<=不变,它将显示“成功!”。 6次如果我甚至对i <= v.size()+ 10都这样做,它仍然会打印出“成功!”。多次。

我对Stroustrup的理解是,应该这样处理。它应该引发异常,因为<=使其读取向量v的6个索引,而第6个索引应超出范围。

有人可以帮助我理解为什么该程序 not 引发范围错误而 not 出现异常的问题吗?

我在全新安装的Ubuntu 18.04上将g ++用作编译器,该安装是出于明确学习代码的目的而安装的。没有使用特殊的编译器参数。只是“ g ++ -o名称CODE.cpp”。

0 个答案:

没有答案