exception -----> Functions
2015-07-03 10:45
253 查看
/* current_exception */
exception_ptr current_exception() noexcept;
返回指向当前异常(或其副本)的智能指针【具体返回对象本身还是副本,是由具体实现库决定的】,如果当前没有异常发生,那么返回一个null-pointer。exception_ptr是一种shared smart pointer类型:只要仍然有一个exception_ptr指向它,那么被指向的exception对象必须保持有效状态,因此,可以利用exception_ptr跨线程间处理异常。
current_exception函数不抛出异常,但是如果实现该函数时,返回的是指向当前副本的指针,那么如果分配内存失败或者复制副本过程失败,将返回一个bad_exception或者一些未定义的值。
/* get_terminate */
terminate_handler get_terminate() noexcept;
返回终止处理函数。当没有catch语句块可以匹配时,自动调用该函数终止程序的执行。如果之前系统中没有通过set_terminate函数设置终止处理函数,那么根据不同实现系统可能返回一个abort()或者null-pointer。
/* get_unexpected */
unexpected_handler get_unexpected() noexcept;
当函数抛出throw列表中未声明的异常类型时,系统自动调用unexpected处理函数。如果未指定,那么该函数将返回一个unspecified value。
/* make_exception_ptr */
template <class E>
exception_ptr make_exception_ptr(E e) noexcept;
返回一个指向e的副本的exception_ptr对象。其行为等价于如下:
template <class E> exception_ptr make_exception_ptr (E e) noexcept {
try {
throw e;
} catch(...) {
return current_exception();
}
}
/* rethrow_exception */
[[noreturn]] void rethrow_exception(exception_ptr p);
抛出p所指的异常对象。此时参数p不能为null exception_ptr,否则将引起未定义的行为。
/* set_terminate */
terminate_handler set_terminate(terminate_handler f) noexcept;
将f设置为终止处理函数。如果没有调用该函数设置f,那么系统在适当时候会调用abort()。程序中可以通过调用terminate()来显式调用当前的终止处理函数,即显式调用f或者abort()。
该函数不抛出异常,如果f是无效的或者没有被正确的实现,那么将引起未定义的行为。
/* set_unexpected */
unexpected_handler set_unexpected(unexpected_handler f) noexcept;
/* terminate */
[[noreturn]]void terminate() noexcept;
调用当前终止处理函数。默认情况下调用abort(),但是也可以通过set_terminate()函数来指定。
/* uncaught_exception */
bool uncaught_exception() noexcept;
如果已经抛出了异常,但是还没有被合适的catch语句块处理,则返回true,否则返回false。
/* unexpected */
[[noreturn]] void unexpected();
调用当前unexpected处理函数。默认情况下调用terminate()。但是可以通过set_unexpected()来指定。
/* throw_with_nested */
[[noreturn]] template <class T>
void throw_with_nested(T&& e);
抛出一个联合了当前异常及指定e的嵌套异常。当前异常变为nested exception,而指定e变为outer exception。
exception_ptr current_exception() noexcept;
返回指向当前异常(或其副本)的智能指针【具体返回对象本身还是副本,是由具体实现库决定的】,如果当前没有异常发生,那么返回一个null-pointer。exception_ptr是一种shared smart pointer类型:只要仍然有一个exception_ptr指向它,那么被指向的exception对象必须保持有效状态,因此,可以利用exception_ptr跨线程间处理异常。
current_exception函数不抛出异常,但是如果实现该函数时,返回的是指向当前副本的指针,那么如果分配内存失败或者复制副本过程失败,将返回一个bad_exception或者一些未定义的值。
/* get_terminate */
terminate_handler get_terminate() noexcept;
返回终止处理函数。当没有catch语句块可以匹配时,自动调用该函数终止程序的执行。如果之前系统中没有通过set_terminate函数设置终止处理函数,那么根据不同实现系统可能返回一个abort()或者null-pointer。
/* get_unexpected */
unexpected_handler get_unexpected() noexcept;
当函数抛出throw列表中未声明的异常类型时,系统自动调用unexpected处理函数。如果未指定,那么该函数将返回一个unspecified value。
/* make_exception_ptr */
template <class E>
exception_ptr make_exception_ptr(E e) noexcept;
返回一个指向e的副本的exception_ptr对象。其行为等价于如下:
template <class E> exception_ptr make_exception_ptr (E e) noexcept {
try {
throw e;
} catch(...) {
return current_exception();
}
}
// make_exception_ptr example #include <iostream> // std::cout #include <exception> // std::make_exception_ptr, std::rethrow_exception #include <stdexcept> // std::logic_error int main() { auto p = std::make_exception_ptr(std::logic_error("logic_error")); try { std::rethrow_exception (p); } catch(const std::exception& e) { std::cout << "exception caught: " << e.what() << '\n'; } return 0; }
/* rethrow_exception */
[[noreturn]] void rethrow_exception(exception_ptr p);
抛出p所指的异常对象。此时参数p不能为null exception_ptr,否则将引起未定义的行为。
/* set_terminate */
terminate_handler set_terminate(terminate_handler f) noexcept;
将f设置为终止处理函数。如果没有调用该函数设置f,那么系统在适当时候会调用abort()。程序中可以通过调用terminate()来显式调用当前的终止处理函数,即显式调用f或者abort()。
该函数不抛出异常,如果f是无效的或者没有被正确的实现,那么将引起未定义的行为。
// set_terminate example #include <iostream> // std::cerr #include <exception> // std::set_terminate #include <cstdlib> // std::abort void myterminate() { std::cerr << "terminate handler called\n"; abort(); // forces abnormal termination } int main() { std::set_terminate(myterminate); throw 0; // unhandled exception: calls terminate handler return 0; }
/* set_unexpected */
unexpected_handler set_unexpected(unexpected_handler f) noexcept;
/* terminate */
[[noreturn]]void terminate() noexcept;
调用当前终止处理函数。默认情况下调用abort(),但是也可以通过set_terminate()函数来指定。
// terminate example #include <iostream> // std::cout, std::cerr #include <exception> // std::exception, std::terminate int main() { char* p, *p2; std::cout << "Attempting to allocate 2 GB at the same point ..."; try { p = new char[1024*1024*1024]; 12 p2 = new char[1024*1024*1024]; } catch (std::exception& e) { std::cerr << "ERROR: could not allocate storage\n"; std::terminate(); } std::cout << "Ok\n"; delete[] p2; delete[] p; return 0; }
/* uncaught_exception */
bool uncaught_exception() noexcept;
如果已经抛出了异常,但是还没有被合适的catch语句块处理,则返回true,否则返回false。
/* unexpected */
[[noreturn]] void unexpected();
调用当前unexpected处理函数。默认情况下调用terminate()。但是可以通过set_unexpected()来指定。
/* throw_with_nested */
[[noreturn]] template <class T>
void throw_with_nested(T&& e);
抛出一个联合了当前异常及指定e的嵌套异常。当前异常变为nested exception,而指定e变为outer exception。
相关文章推荐
- bzoj1008 数学题+快速幂
- csv文件解析(用于关卡配置)
- Codeforces Round #309 (Div. 1) C. Love Triangles(二分图)
- sed例子
- 安装外部的maven依赖到自己的本地仓库,通过mvn命令的方式
- 利用反射对pojo进行排序后转String
- cpu高的解决方案
- 申请IOS开发企业帐号官方给予的回复
- 字符统计
- mysql建表出现Timestamp错误
- [Unity3D]Script 脚本所有编译器属性详解
- 论 __lookup_machine_type的消失(Linux-3.0 ARMv7)
- App Extension编程指南(iOS8/OS X v10.10)中文版
- mysql建表出现Timestamp错误
- iOS 一些简单动画
- Linux中tail命令使用
- java中的引用类型概念
- Linux 命令 sudo
- Putty的一些常用设置
- iOS8扩展插件开发配置