/* 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的更多相关文章

  1. Add GUI to connect to SQL

    (*********************************************************************************) (* *) (* Below i ...

  2. [Python Essential Reference, Fourth Edition (2009)]读书笔记

    Python programs are executed by an interpreter. When you use Python interactively, the special varia ...

  3. python3.4 build in functions from 官方文档 翻译中

    2. Built-in Functions https://docs.python.org/3.4/library/functions.html?highlight=file The Python i ...

  4. 5.24 Declaring Attributes of Functions【转】

    转自:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 5.24 Declaring Attributes o ...

  5. Functions

    Small The first rule of functions is that they should be small.The second rule of functions is that ...

  6. Error Handling and Exception

    The default error handling in PHP is very simple.An error message with filename, line number and a m ...

  7. 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 ...

  8. Think Python - Chapter 03 - Functions

    3.1 Function callsIn the context of programming, a function is a named sequence of statements that p ...

  9. exception -----> Typedefs & Classes

    #include <exception> Typedefs exception_ptr 一种类型,描述了一个指向异常的指针 terminate_handler 一种类型,描述了一个适合作为 ...

随机推荐

  1. Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

    首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和 ...

  2. 再看.net本质

    1.[资源的地址-通用资源标识符] 我们在地址栏中输入的内容称为通用资源标识符(Universal Resource Identifier,URI),它有很多种形式,在Web中我们通常使用称为统一资源 ...

  3. SQL Server 索引和视图

    Ø 索引 1. 什么是索引 索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度. 2. 索引分类 数据库中索引主要分为两类:聚集索引和非聚集索引.SQL Serv ...

  4. javaSE第十五天

    第十五天    117 1. 对象数组(掌握)    117 (1)定义:    117 (2)对象数组的内存图解    117 (3)案例:    117 2. 集合(Collection)(掌握) ...

  5. 基于s5pv210嵌入式系统busybox文件系统移植

    基于s5pv210嵌入式系统busybox文件系统移植 1.下载源码 busybox.net/downloads下载最新版的busybox源码,最新源码为1.21.1 2.解压源码文件 tar xvf ...

  6. POJ C程序设计进阶 编程题#3: 发票统计

    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个小型的报账系统,它有如 ...

  7. Objective-C控制语句

    Objective-C控制语句有以下三类: 分支语句:if-else,switch 循环语句:while,do-while,for 与程序转移相关的跳转语句:break,continue,goto. ...

  8. PHP截取字符串 兼容utf-8 gb2312

    <?php function subString($string,$length,$append = false) { if(strlen($string) <= $length ) { ...

  9. linux下关于mysqldump备份的.sql导入数据库表数据丢失优化

    直切正题 前2个随笔做了linux下自动备份,但是备份的.sql文件发现表数据丢失,原因是数据库太大我的数据库文件是804M,在用ftp拉去也会丢失数据 所以对db.sh备份数据库加一个压缩gizp ...

  10. web app 开发

    去除手机浏览器标签默认高亮边框 -webkit-tap-highlight-color 属性 属性描述:这个属性可以指设置透明度.如果未设置透明度,iOS上的Safari会给予颜色一个默认的透明度.把 ...