tookkke 2016-06-14 14:02 采纳率: 100%
浏览 1930
已采纳

c++ catch异常处理问题

catch vector越界时throw的out_of_range时必须#include 的问题
我知道out_of_range是stdexcept中定义的一个类
但是,vector中没有关于这个类的声明的话,它是怎么抛出这个类的
/************** 上面有点没说清楚 **************/

查到vector中代码的时候发现它使用的是__throw_out_of_range_fmt()这个函数;
这个函数只在functexcept.h中找到了它的声明,定义被隐藏起来了?

 #include <iostream>

using namespace std;

int main()
{
    __throw_out_of_range("out_of_range");
    return 0;
}

这样写是能成功编译的,运行也会提示程序抛出了out_of_range
我这里并没有 #include <stdexcept>
也就是并没有声明过out_of_range这个类
却能够抛出它,所以混乱了
问题的关键就是 __throw_out_of_range这个函数的定义

  • 写回答

2条回答 默认 最新

  • 小灸舞 2016-06-15 01:20
    关注

    C++异常类,继承自logic_error,logic_error的父类是exception。属于运行时错误,如果使用了一个超出有效范围的值,就会抛出此异常。也就是一般常说的越界访问。定义在命名空间std中。
    使用时须包含头文件 stdexcept

     #include<iostream>
    #include<stdexcept>
    #include<vector>
    using namespace std;//或者用其他方式包含using std::logic_error;和using std::out_of_range;
    int main (void)
    {
        vector<int> myvector(10);
        try
        {
            myvector.at(20)=100; // vector::at throws an out-of-range
        }
        catch (out_of_range& oor)
        {
            cerr << "Out of Range error: " << oor.what() << endl;
        }
        getchar();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧