首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++】异常处理 ⑤ ( 异常类型 | 传统 C 语言异常处理 | C++ 异常处理 - 抛出 int 类型异常 | 捕获异常类型 异常变量 | C++ 异常处理 - 抛出指针类型异常 )

一、传统异常处理 1、C 语言异常处理 传统 C 语言中 错误处理 , 是通过返回不同 int 类型值进行 , 如 : 执行成功返回 0 ; 情况一 执行失败 , 返回 1 ; 情况二 执行失败...; 传统 C 语言处理方式就是 : 返回 int 类型返回值 , 函数执行成功返回 0 , 不同失败情况返回不同返回值 ; 代码示例 : #include "iostream" using namespace...二、C++ 异常处理 - 抛出 int 类型异常 1、C++ 异常处理 在 C++ 中 错误处理 可以不占用 返回值 位置 , 使用 异常处理 机制 , 在函数中 抛出 指定类型 异常 进行处理 ;...2、C++ 异常接收方式 抛出异常后 , 捕获异常 , 接收异常有很多种方式 ; 可以按照 普通类型 接收异常 , 可以按照 引用类型 接收异常 , 可以按照 指针类型 接收异常 ; 3、捕获异常类型...三、C++ 异常处理 - 抛出指针类型异常 抛出 / 捕获异常 , 有很多种方式 ; 可以按照 普通类型 抛出 / 捕获异常 , 可以按照 引用类型 抛出 / 捕获异常 , 可以按照 指针类型 抛出 /

10410
您找到你想要的搜索结果了吗?
是的
没有找到

C++】异常

C语言传统处理错误方式 错误处理机制: 1.终止程序 如:assert 断言终止 ,会直接报告出现错误位置 (assert只在debug版本生效) 如:发生内存错误,或者除0错误时,导致终止程序...返回错误码 错误码本质就是一个编号,不能包含更多信息,就需要程序员自己去查对应错误信息,很不方便 所以为了在产生错误时,有更丰富信息显示, C++就提出了异常 异常 可以抛一个对象出来,对象可以包含各种各样信息...C++异常 概念 异常是一种处理错误方式 当一个函数发现自己无法处理错误时,就可以抛异常,让函数直接或者间接调用者处理这个错误 用法 分为抛出异常 (throw)和 捕获异常(try catch)...当在Func函数中catch要捕获异常时,再将异常抛出,使main函数中进行 捕获异常 异常规范 在C++98中 exception() throw(); 后面加了个throw,意思为声明这个函数不会抛异常...C++没有垃圾回收机制,资源需要自己管理。有了异常非常容易导致内存泄漏、死锁等异常 安全问题 3. C++标准库异常体系定义得不好,导致大家各自定义各自异常体系,非常混乱

15330

C++】异常

一、C语言传统处理错误方式 传统错误处理机制: 1. 终止程序 ,如 assert ,缺陷:用户难以接受。如发生内存错误,除 0 错误时就会终止程序。 2....实际中C 语言基本都是使用返回错误码方式处理错误,部分情况下使用终止程序处理非常严重错误。...二、 C++异常概念 异常是一种处理错误方式, 当一个函数发现自己无法处理错误时就可以抛出异常,让函数 直接或间接调用者处理这个错误 。...+标准库异常体系 C++ 提供了一系列标准异常,定义在 中,我们可以在程序中使用这些标准异常。...另外 OO 语言基本都是 用异常处理错误,这也可以看出这是大势所趋。

14420

C++异常

C++异常 TOC 传统错误处理机制 C语言传统处理错误方式有几种 assert断言。当遇到错误时直接中止程序并且报错显示在第几行代码出现问题,缺陷是遇到错误会终止程序。...C++中异常经常会导致资源泄漏问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和unlock之间抛出了异常导致死锁,C++经常使用RAII来解决以上问题,关于RAII后续我会在智能指针篇章进行介绍...// 这里表示这个函数会抛出A/B/C/D中某种类型异常 void fun() throw(A,B,C,D); // 这里表示这个函数只会抛出bad_alloc异常 void* operator...new和构造函数) 图片 在C++11中对异常规范进行了简化:函数后面接noexcept,表示函数不抛异常。...但总而言之,异常利大于弊,在实际中还是鼓励使用,另外在别的语言(如JAVA、Python)也都是用异常处理错误。

36300

C++『异常

✨个人主页: 北 海 所属专栏: C++修行之路 操作环境: Visual Studio 2022 版本 17.6.5 文章目录 前言 ️正文 1.异常基本概念 1.1.C语言异常处理方式 1.2...本文将深入探讨异常基本概念、异常处理方式、异常使用技巧和异常体系设计,以帮助开发者更好地理解和应用异常处理机制 ️正文 1.异常基本概念 1.1.C语言异常处理方式 在 C语言 中,面对异常主要有以下两种处理方式...,取决于编译器不同实现,比如上面的 3 号错误码在 VS 中就表示 异常退出,具体原因是 越界访问 除了返回错误码外,C语言 还支持通过函数终止进程,说白了就是给进程发送 信号 可以使用 exit...异常处理方式 无论是 错误码 还是 终止进程,都只能提供简略错误信息,对于 C++ 这种面向对象语言来说太无力了,需要一种全新异常处理方式:将异常化做一个对象,配合异常体系解读异常 万物皆可为对象...,OO 语言基本都是使用异常处理错误,这是大势所趋 总结 以上就是本次关于C++『异常全部内容了,异常处理是软件开发中重要错误管理工具,本文深入探讨了异常基本概念、C++中处理方式、使用技巧和异常体系设计

13610

C++】异常

C传统处理错误方式 C语言传统错误处理机制: 1. 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 2....如系统很多库接口函数都是通过把错误码放到errno中,表示错误 实际中C语言基本都是使用返回错误码方式处理错误,部分情况下使用终止程序处理非常严重错误 ---- C++异常概念 异常是一种处理错误方式...(内存泄漏、句柄未关闭等) 3.C++中异常经常会导致资源泄漏问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和unlock之间抛出了异常导致死锁,C++经常使用RAII来解决以上问题...3.若无异常接口声明,则此函数可以抛掷任何类型异常 // 这里表示这个函数会抛出A/B/C/D中某种类型异常 void fun() throw(A,B,C,D); // 这里表示这个函数只会抛出...,从而达到多态效果 ---- C++标准库异常体系 C++ 提供了一系列标准异常,定义在 中,我们可以在程序中使用这些标准异常

11820

C++:异常

因此C++11引入异常C++异常概念 异常是一种处理错误方式,当一个函数发现自己无法处理错误时就可以抛出异常,让函数直接或间接调用者处理这个错误。...可以在函数后面接throw(类型),列出这个函数可能抛掷所有异常类型。 2. 函数后面接throw(),表示函数不抛异常C++11新增了noexcept关键字,也表示不抛异常。 3....//异常规范 // 这里表示这个函数会抛出A/B/C/D中某种类型异常 void fun() throw(A,B,C,D); // 这里表示这个函数只会抛出bad_alloc异常 void* operator...+标准库异常体系 C++ 提供了一系列标准异常,定义在 中,我们可以在程序中使用这些标准异常。...C++标准库异常体系定义得不好,导致大家各自定义各自异常体系,非常混乱。 5. 异常尽量规范使用,否则后果不堪设想,随意抛异常,外层捕获用户苦不堪言。

65530

C++异常

C++异常 C++异常概念 C语言传统处理错误方式: 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 返回错误码,缺陷:需要程序员自己去查找对应错误。...如系统很多库接口函数都是通过把错误码放到errno中,表示错误。 实际中C语言基本都是使用返回错误码方式处理错误,部分情况下使用终止程序处理非常严重错误。...// 这里表示这个函数会抛出A/B/C/D中某种类型异常 void fun() throw(A,B,C,D); // 这里表示这个函数只会抛出bad_alloc异常 void* operator...&& x) noexcept; C++标准库异常体系 C++ 提供了一系列标准异常,定义在 中,我们可以在程序中使用这些标准异常。...总结:异常总体而言,利大于弊,所以工程中我们还是鼓励使用异常。另外OO语言基本都是用异常处理错误,这也可以看出这是大势所趋。

23770

C++异常

C++异常 零、前言 一、C/C++处理错误 1、C处理错误方式 2、C++处理错误方式 二、异常使用 1、异常栈展开和匹配原则 2、异常重新抛出 3、异常安全及规范 4、自定义异常体系 5、C+...+标准库异常体系 6、异常优缺点 零、前言 本章主要学习C++中异常这一方面的知识 一、C/C++处理错误 1、C处理错误方式 传统错误处理机制: 终止程序,如assert,缺陷:用户难以接受...如系统很多库接口函数都是通过把错误码放到errno中,表示错误 C 标准库中setjmp和longjmp组合,这个不是很常用 注:实际中C语言基本都是使用返回错误码方式处理错误,部分情况下使用终止程序处理非常严重错误...,则此函数可以抛掷任何类型异常C++11中简化了该操作,如果不抛出错误那么则声明为noexcept,如果可能抛出错误那么则不用声明 示例: // 这里表示这个函数会抛出A/B/C/D中某种类型异常...另外OO语言基本都是用异常处理错误,这也可以看出这是大势所趋

66070

C++】异常

一、传统C语言处理错误方式 传统C语言处理错误时主要有以下两种方式: 直接终止程序:比如在程序内部使用 assert 进行断言,当发生内存错误、越界访问、除0错误等时就直接终止程序;这种方式缺点是用户难以接受...实际中C语言基本都是使用返回错误码方式来处理错误,部分情况下会终止程序来处理一些非常严重错误。...修饰函数进行了检查,如果该函数被 noexcept 修饰,但是可能会抛出异常,则编译器会报一个警告,但并不影响程序正确性: ---- 四、C++ 标准库异常体系 C++ 提供了一系列标准异常...---- 六、异常优缺点 C++ 异常优点: 相比传统C语言返回错误码方式,异常可以更加清晰准确展示出错误各种信息,甚至可以包含堆栈调用信息,这样可以帮助我们更好定位程序 bug; 返回错误码传统方式还有一个很大问题...总结:异常总体而言利大于弊,所以在工程开发中我们是鼓励使用异常;另外面向对象语言基本都是用异常处理错误,这也是大势所趋。

35720

C++】C 语言C++ 语言关系 ( C 语言发展 | C 语言缺陷 | C 语言 + 面向对象 + 高级语言特性 | C++ 语言增加内容 | C 语言C++ 语言应用场景 )

C99 , C11 , C17 等标准 , 以满足新编程需求 ; 二、C 语言缺陷 C 语言有如下缺陷 : C 语言 没有经历过 缜密 设计过程 , 都是根据需求逐渐完善 , 出现了很多缺陷和漏洞...+ 高级语言特性 1、C 语言衍生高级语言 鉴于 上述 面向过程 C 语言 设计缺陷 , 在 C 语言 基础上 , 引入 面向对象 设计方法 , 同时加入 高级语言特性 , 开发出了 高级面向对象...2、C 语言C++ 语言关系 C 语言C++ 语言 并 不是 竞争关系 ; C++ 语言 是 以 C 语言为基础 加强版本编程语言 , 可以看作是更好 C 语言 , 在 C++ 语言...语言增加内容 C++ 语言C 语言基础上 : 增加了 面向对象 支持 ; 进行了 类型加强 ; 进行了 函数加强 ; 增加了 异常处理机制 ; 增加了 STL 特性 ; 4、C 语言C++...语言应用场景 C 语言C++ 语言应用场景 : C语言 应用场景 : 系统软件、操作系统、编译器等 底层系统级应用 ; C++ 语言 应用场景 : 大型应用程序、游戏 等更 高级应用 ; 在不同

22020

C语言笔记】C语言编译过程

下面以windows环境下test.c为例,test.c代码为: #include int main(void) { printf("This is a test program...如图,编译生成可执行文件过程实际包含四个过程:(1)预处理;(2)编译;(3)汇编;(4)链接。...2、预处理(Preprpcessing) 使用预处理器把源文件test.c经过预处理生成test.i文件,预处理用于将所有的#include头文件以及宏定义替换成其真正内容。...预处理命令为: gcc -E test.c -o test.i 上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。 预处理之后得到仍然是文本文件。...汇编过程命令为: gcc -c test.s -o test.o 上述命令中-c、-o让汇编器把汇编文件test.s转换成目标文件test.o。

12.1K30

C++ 语言异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )

捕获字符串异常 : 捕获抛出字符串异常 , 在 catch 后括号中捕获 const char* c 类型异常 ; 捕获异常类型 : const char* c // 1....捕获字符串异常 try { throwString(); } catch (const char* c) { cout << " 捕获了字符串异常 " << c << endl; }...代码执行结果 : 捕获了字符串异常 throwStringException 抛出异常字符串 III 异常对象 ---- C++ 中可以抛出任意一个对象 ; 1....捕获并处理异常对象 : 捕获异常类型 : const char* c 捕获异常对象 : 捕获使用 exception 构造方法创建异常 , 需要在 catch 后括号中注明异常类型 exception...捕获字符串异常 try { throwString(); } catch (const char* c) { cout << " 捕获了字符串异常 " << c << endl; }

1.2K10

从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介

一、C语言错误处理方法 1、返回值(if … else语句判断错误) 2、errno(linux 系统调用) 3、goto语句(函数内局部跳转) 4、setjmp、longjmp(Do not...+异常雏形,即使Divide函数本身没有调用longjump,而是调用了某个函数,在这个函数内longjump,也可以跳转到setjump 处,这样就不用通过一层层函数返回值来判断错误。...C语言出错处理被认为是紧耦合,函数使用者必须在非常靠近函数调用地方编写错误处理代码,这会使得其变得笨拙以及难以使用。...二、C++异常处理方法(throw, try, catch) 错误处理代码编写不再冗长乏味,并且不再与“正常”代码混在一起。程序员可以将注意力集中于正常流程,然后在某个区域里编写异常处理代码。...即无论在多远throw,都可以被catch到,但需要注意是类型需要匹配,下面的文章将讨论抛出自定义类型异常

1.7K00

利用C语言setjmp和longjmp,来实现异常捕获和协程

因此,C 语言为我们准备了 setjmp 这个库函数来把当前上下文信息保存起来,暂时存储到一个缓冲区中。 保存目的是什么?为了在以后可以恢复到当前这个地方继续执行。...因此,C 语言中为我们提供了 longjmp 函数来实现远程跳转,从它名字就可以额看出来,也就是说可以跨函数跳转。...异常捕获在一些高级语言中(Java/C++),直接在语法层面进行了支持,一般就是 try-catch 语句,但是在 C 语言中需要自己去实现。...C 语言协程实现 这里给出一个最最简单模型,通过 setjmp/longjmp 来实现协程机制,主要是目的是来理解协程执行序列,没有解决参数和返回值传递问题。...如果想深入研究 C 语言协程实现,可以看一下达夫设备这个概念,其中利用 goto 和 switch 语句来实现分支跳转,其中使用语法比较怪异、但是合法。

1.8K10

C++异常处理开销

C++异常C++有别于C一大特性 ,异常处理机制给开发人员处理程序中可能出现意外错误带来了极大方便,但为了实现异常,编译器会引入额外数据结构与处理机制,增加了系统开销。...C++异常处理使用try、throw和catch三个关键词来完成,在程序执行过程中,异常处理流程大致如下:当函数体内某处发生异常(trow 异常)时,会检查该异常发生位置是否在当前函数某个try块之内...我们首先来看看引入了异常处理机制栈框架如下图所示: image.png 在每个 C++ 函数栈框架中都多了一与异常处理相关数据,其中EXP类型结构体是一个单向链表式结构,用于完成异常回溯捕获以及栈回退清理工作...,比如函数内抛出异常需要注意栈展开导致内存泄露,析构函数抛出异常将程序置于不确定状态等; (3)异常跳转会彻底扰乱程序执行流程并难以判断,给代码调试和维护增加难度; 异常处理是 C++ 中十分有用崭新特性之一...---- 参考文献 [1]改善C++程序150个建议.李健.建议69:熟悉异常处理代价 [2]C++异常机制实现方式和开销分析

1.1K20

C++ 异常处理开销

文章目录 参考文献 C++ 异常C++ 有别于 C 一大特性 ,异常处理机制给开发人员处理程序中可能出现意外错误带来了极大方便,但为了实现异常,编译器会引入额外数据结构与处理机制,增加了系统开销...C++ 异常处理使用 try、throw 和 catch 三个关键词来完成,在程序执行过程中,异常处理流程大致如下:当函数体内某处发生异常(trow 异常)时,会检查该异常发生位置是否在当前函数某个...为了能够成功地捕获异常和正确地完成栈回退(stack unwind),C++引 入了相应处理机制以及 TRYBLOCK、CATCHBLOCK 和UNWINDTBL 数据结构来保存异常处理。...异常处理是 C++ 中十分有用崭新特性之一,在大多数情况下,有着优异表现和令人满意时空效率。但使用异常时,我们要充分意识到异常带来和开销和需要注意问题,综合考虑之下,再谨慎使用异常。...参考文献 改善C++程序150个建议[M].李健.建议69:熟悉异常处理代价 C++异常机制实现方式和开销分析

73130

c语言getchar()用法_c语言getchar功能

(1)语法 int getchar(void); (2)返回值 getchar函数返回值是用户输入第一个字符ASCII码,如出错返回-1,且将用户输入字符回显到屏幕.如用户在按回车之前输入了不止一个字符...,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续getchar调用不会等待用户按键,而直接读取缓冲区中字符,直到缓冲区中字符读完为后,才等待用户按键。...函数值,如果有循环或足够多getchar语句,就会依次读出缓冲区内所有字符直到’\n’.要理解这一点,之所以你输入一系列字符被依次读出来,是因为循环作用使得反复利用getchar在缓冲区里读取字符...,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消’\n’影响,可以用getchar()来清除,如:while((c=getchar())!...补充: putchar()用法: (1)输出:putchar函数只能用于单个字符输出,向终端输出一个字符,且一次只能输出一个字符。

4.6K60
领券