一直都是照着别人的指示在代码中加入异常的检查,但是从来没有在代码中处理过异常。今天下午把一段代码写到VS里,代码会对非法输入吐出异常,然后main函数里会捕捉到这些异常。
吐出异常的代码:
- if (numbers == NULL || length <= 0)
- throw new std::exception("Invalid Parameters.");
- try {
- std::cout << min(NULL, length1) << std::endl;
- }
- catch (std::exception &e) {
- std::cerr << e.what() << std::endl;
- }
- catch (...) {
- std::cout << "This is a exception without handling."
- << std::endl;
- }
- try {
- std::cout << min(numbers1, 0) << std::endl;
- }
- catch (std::exception *e) {
- std::cerr << e->what() << std::endl;
- }
- catch (...) {
- std::cout << "This is a exception without handling."
- << std::endl;
- }
运行的结果是:
- This is a exception without handling.
- Invalid Parameters.
仔细想想,new操作符的返回值是一个指针,因此,throw new std::exception吐出的是一个指针类型的异常!这个指针指向一个std::exception的对象,因此需要catch(std::exception *e)才能匹配。
而throw std::exception吐出的才是一个std::exception类类型的异常,这时使用catch(std::exception &e)才能匹配。