标签:
static_cast、reinterpret_cast、const_cast和dynamic_cast
1.static_cast
2.reinterpret_cast
3.const_cast
4.dynamic_cast
异常处理
通常的做法是:在预计会发生异常的地方,加入相应的代码,但是这种做法并不总是适用的。
…//对文件A进行了相关的操作
fun(arg , …);//可能发生异常
…….
用try、catch处理异常
如果一个函数在执行的过程中,抛出的异常在本函数内就被catch块捕获并处理了,那么该异常就不会抛给这个函数的调用者(也称“上一层的函数”);如果异常在本函数中没被处理,就会被抛给上一层的函数。
C++标准异常类
在用dynamic_cast进行从多态基类对象(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会抛出异常。
在用new运算符进行动态内存分配时,如果没有足够的内存,则会引发此异常。
用vector或string的at成员函数根据下标访问元素时,如果下标越界,就会抛出此异常。
下面是一个类型转换异常的小例子:
#include <iostream> using namespace std; class Base { private: int value; public: virtual void print() { cout << "Hello world" << endl; } Base(int value) :value(value) {}; }; class Derived :public Base { public: void print() { cout << "hehh" << endl; } }; int main() { Base b(4); try { Derived & p = dynamic_cast<Derived &>(b); } catch (bad_cast & e) { cerr << e.what() << endl; } return 0; }
程序运行结果:
参考链接:
https://www.coursera.org/learn/cpp-chengxu-sheji
标签:
原文地址:http://www.cnblogs.com/helloforworld/p/5655502.html