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这个函数的定义
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;
}