首页 > 其他分享 >CPP异常处理之noexcept函数类型

CPP异常处理之noexcept函数类型

时间:2024-10-31 18:49:29浏览次数:1  
标签:function exception 函数 throwing noexcept exceptions CPP throw

Exception specifications and noexcept in CPP

Looking at a typical function declaration, it is not possible to determine whether a function might throw an exception or not:

int doSomething(); // can this function throw an exception or not?

In the above example, can the doSomething function throw an exception? It’s not clear. But the answer is important in some contexts. If doSomething could throw an exception, then it’s not safe to call this function from a destructor, or any other place where a thrown exception is undesirable.

While comments may help enumerate whether a function throws exceptions or not (and if so, what kind of exceptions), documentation can grow stale and there is no compiler enforcement for comments.

Exception specifications are a language mechanism that was originally designed to document what kind of exceptions a function might throw as part of a function specification.

The noexcept specifier

In C++, all functions are classified as either non-throwing or potentially throwing. A non-throwing function is one that promises not to throw exceptions that are visible to the caller. A potentially throwing function may throw exceptions that are visible to the caller.

在抛出异常处理时, C++中只有两种函数类型, 一种是保证不会抛出异常, 另一种是有可能抛出异常

To define a function as non-throwing, we can use the noexcept specifier. To do so, we use the noexcept keyword in the function declaration, placed to the right of the function parameter list:

void doSomething() noexcept; // this function is specified as non-throwing

Note that noexcept doesn’t actually prevent the function from throwing exceptions or calling other functions that are potentially throwing. This is allowed so long as the noexcept function catches and handles those exceptions internally, and those exceptions do not exit the noexcept function.

noexcept 函数并不代表在函数中不允许抛出异常, 只要这个函数能够在内部捕获并处理这个异常, 并且不将这个异常返回到外部调用函数, 就是一个noexcept函数.

If an unhandled exception would exit a noexcept function, std::terminate will be called (even if there is an exception handler that would otherwise handle such an exception somewhere up the stack). And if std::terminate is called from inside a noexcept function, stack unwinding may or may not occur (depending on implementation and optimizations), which means your objects may or may not be destructed properly prior to termination.

如果一个定义为 noexcept 的函数

标签:function,exception,函数,throwing,noexcept,exceptions,CPP,throw
From: https://www.cnblogs.com/wevolf/p/18518656

相关文章

  • Python 函数装饰器
    装饰器(Decorators)是Python的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。首先,简单举个例子:函数参数传递:imp......
  • Linux系统调用和库函数的区别是什么
    Linux系统调用和库函数是在程序设计中常用的两个概念,具有明显的差异。1、系统调用:是操作系统内核提供的功能接口,用于执行核心操作,如文件管理、进程控制等;2、库函数:是用户空间提供的封装好的函数库,如C库、数学库等。区别主要体现在执行级别、性能、功能和使用场合等方面。系统调用......
  • C++——写一函数,将一个3x3的整型矩阵转置。用指针或引用方法处理。
    没注释的源代码#include<iostream>usingnamespacestd;voidmove(int*p);intmain(){  inta[3][3],*p;  cout<<"pleaseinputmatrix:"<<endl;  for(inti=0;i<3;i++)  {    for(intj=0;j<3;j++)    {     ......
  • C++——将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、
    没注释的源代码#include<iostream>#include<stdio.h>#include<string.h>usingnamespacestd;voidtransform(int*arry,intcol_row);intmain(){   intarry[5][5];   cout<<"Pleaseentera5x5matrix:"<<endl;   for(......
  • Go 语言 -make函数
    在Go语言中,make是一个内置函数,专门用于分配和初始化slice(切片)、map(映射)和channel(通道)三种数据类型。**make函数不会返回一个指针,而是返回初始化后的数据结构本身的引用**。make函数的用途make的主要作用是为这些引用类型的数据结构分配内存并进行初始化,而不是像new......
  • bcc测量函数执行时间
    获取函数的执行时间对性能分析十分有益,这里给出一个示例来测量kernel函数的执行时间。kprobe可用来在函数执行的开始加入探测点,kretprobe可以在函数返回前加入探测点,分别在这个两个探测获取时间,其差值可以作为函数的执行时间。相对ftrace,这种方式要精确很多。下面是一个例子,测量......
  • BitNet.cpp:革新性的1比特LLM推理框架,让CPU也能驾驭百亿参数大模型!
    ......
  • 在 SQL 中,有许多高效、简洁的函数可用于数据处理、查询优化和数据转换。
    以下是一些常见的SQL函数及其详细中文解释、示例和总结:1.COALESCE作用:COALESCE函数从左到右依次检查其参数,并返回第一个非空的值。如果所有参数都为空,则返回NULL。应用场景:可以在处理缺失数据时使用,尤其是多个字段可能为空的情况下,可以选择一个优先级最高的非空值。......
  • No.5 R的基本函数
    一、运算符1.算术运算符%%:求余2.比较运算符==:等于!=:不等于3.逻辑运算符逻辑或|逻辑与&逻辑非!二、数值处理函数1.数学函数abs(a):求a的绝对值sqrt(a):平方根log(a):exp():指数round(a,3):三位小数 2.统计函数mean(a):均值median(a):中位数var......
  • Excel函数之VLOOKUP
    1.介绍VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来查找数据,按列查找,在多个表格之间核对数据、传递数据,在多个表格之间快速导入数据等函数功能,主要用于查找和检索数据。2.使用VLOOKUP函数语法=VLOOK......