exception -----> Functions
/* 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();
}
}
// 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 ;
}
/* 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 ; // unhandled exception: calls terminate handler return ;
}

/* 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 ;
}

/* 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 -----> Functions的更多相关文章
- Add GUI to connect to SQL
(*********************************************************************************) (* *) (* Below i ...
- [Python Essential Reference, Fourth Edition (2009)]读书笔记
Python programs are executed by an interpreter. When you use Python interactively, the special varia ...
- python3.4 build in functions from 官方文档 翻译中
2. Built-in Functions https://docs.python.org/3.4/library/functions.html?highlight=file The Python i ...
- 5.24 Declaring Attributes of Functions【转】
转自:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 5.24 Declaring Attributes o ...
- Functions
Small The first rule of functions is that they should be small.The second rule of functions is that ...
- Error Handling and Exception
The default error handling in PHP is very simple.An error message with filename, line number and a m ...
- Think Python - Chapter 16 - Classes and functions
16.1 TimeAs another example of a user-defined type, we’ll define a class called Time that records th ...
- Think Python - Chapter 03 - Functions
3.1 Function callsIn the context of programming, a function is a named sequence of statements that p ...
- exception -----> Typedefs & Classes
#include <exception> Typedefs exception_ptr 一种类型,描述了一个指向异常的指针 terminate_handler 一种类型,描述了一个适合作为 ...
随机推荐
- 有联系的jQuery选择器
1.包含关系 2.相邻关系 //JavaScript$(document).ready(function () { $(".studentName + div").hide(); ...
- Windows 10 LNK File分析
前情提要:警方接获线报,黑道份子阿强涉及制造与贩卖毒品,警方在其住处扣得笔记本电脑及数个U盘,送往实验室进行取证分析. 取证人员对证物进行证物镜像制作,并进行证物处理(Evidence Process ...
- vsftp配置参数
转载:http://blog.chinaunix.net/uid-134240-id-172158.html listen_address=ip address 指定侦听IP listen_port= ...
- swift皮筋弹动发射飞机
今天在那个ios教程网上看到了一个不错的ios游戏源码,这是一个款采用swift实现的皮筋弹动发射飞机游戏源码,游戏源码比较详细,大家可以研究学习一下吧. <ignore_js_op> & ...
- requireJS心得
最近有幸接触到前端分模块加载JS框架,并且结合avalonJS使用,在此记录学习痕迹: a.实现js文件的异步加载,避免网页失去响应: b.管理模块之间的依赖性,便于代码的编写和维护. (1)requ ...
- 软件工程 speedsnail 冲刺4
2015-5-8 完成任务:学习了黑马android教学视频7.8.9集,对布局和计划做了调整: 遇到问题: 问题1 异常 Warning: Activity not started, its cur ...
- 安装CMS遇到php5.3的问题
DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recomm ...
- 关于Ajax跨域
本人因工作需求,编写了一个测试页面,在页面填写完信息之后去向一个站点请求数据,然后返回结果!一开始是直接用Ajax在脚本中去访问,没有大碍(因为目标地址是本机上的一个网站),但是当站点去外部的网站时, ...
- source insight用于C语言编程的工具脚本
简单来说,source insight提供的功能功能还不够傻瓜,用起来还不够方便,所以写了此脚本,提高开发效率. 部分source insight提供的功能也包含了进来,主要是因为我不喜欢使用太多的快 ...
- C#生成不重复的随机数
在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数 http://www.jbxue.com/tags/suijishu.h ...