C++ 异常处理

C++ 异常处理机制允许程序在运行时处理错误或意外情况。它提供了捕获和处理错误的一种结构化方式,使程序更加健壮和可靠。

异常处理的基本概念:

  • 异常: 程序在运行时发生的错误或意外情况。
  • 抛出异常: 使用 throw 关键字将异常传递给调用堆栈。
  • 捕获异常: 使用 try-catch 块捕获和处理异常。
  • 异常类型: 表示异常类别的标识符。

异常处理流程:

  1. 抛出异常: 当检测到错误或意外情况时,使用 throw 关键字抛出异常。
  2. 解开堆栈: 异常会沿着调用堆栈向上传播,直到找到匹配的 catch 块。
  3. 捕获异常: catch 块捕获并处理抛出的异常。
  4. 异常处理: 在 catch 块中,您可以执行代码来处理异常,例如记录错误信息、恢复程序状态或终止程序。

示例:

#include <iostream>

int main() {
try {
int age = 15;
if (age < 18) {
throw std::runtime_error("Age must be 18 or older");
}
std::cout << "Access granted - you are old enough." << std::endl;
} catch (const std::runtime_error& e) {
std::cerr << "Error: " << e.what() << std::endl;
} return 0;
}

在这个例子中:

  • throw std::runtime_error("Age must be 18 or older"); 语句会抛出一个 std::runtime_error 类型的异常,如果 age 小于 18。
  • catch (const std::runtime_error& e) 块会捕获 std::runtime_error 类型的异常,并将其存储在 e 变量中。
  • std::cerr << "Error: " << e.what() << std::endl; 语句会输出异常信息。

优点:

  • 提高程序健壮性:异常处理使程序能够更优雅地处理错误,避免程序崩溃。
  • 提高代码的可维护性:异常处理使代码更容易理解和维护,因为它将错误处理与正常代码分离。
  • 提高代码的可重用性:异常处理机制可以很容易地集成到现有的代码库中。

缺点:

  • 可能导致性能下降:异常处理会增加一些运行时开销,因为需要检查和处理异常。
  • 可能使代码复杂化:过度的异常处理可能会使代码变得难以理解和维护。

总结:

C++ 异常处理是一种强大的机制,可用于提高程序的健壮性、可维护性和可重用性。但是,重要的是要谨慎使用异常处理,并避免过度使用它,因为它可能会导致性能下降和代码复杂化。

C++ 两个数相加

在 C++ 中,有多种方法可以实现两个数的相加。以下是一些常见的方法:

  1. 使用基本运算符

最简单的方法是使用加号 (+) 运算符直接对两个数字进行求和。

int num1 = 10;
int num2 = 20;
int sum = num1 + num2; cout << "The sum of " << num1 << " and " << num2 << " is: " << sum << endl;
  1. 使用函数

您可以创建自己的函数来执行两个数的相加操作。

int addNumbers(int x, int y) {
return x + y;
} int main() {
int num1 = 30;
int num2 = 40;
int sum = addNumbers(num1, num2); cout << "The sum of " << num1 << " and " << num2 << " is: " << sum << endl;
return 0;
}
  1. 使用类

您可以创建一个类来封装求和操作。

class Calculator {
public:
int add(int x, int y) {
return x + y;
}
}; int main() {
Calculator calc;
int num1 = 50;
int num2 = 60;
int sum = calc.add(num1, num2); cout << "The sum of " << num1 << " and " << num2 << " is: " << sum << endl;
return 0;
}
  1. 使用 STL 函数

C++ 标准库提供了 std::plus 函数,用于计算两个数的和。

#include <iostream>
#include <functional> int main() {
int num1 = 70;
int num2 = 80;
int sum = std::plus<int>()(num1, num2); cout << "The sum of " << num1 << " and " << num2 << " is: " << sum << endl;
return 0;
}
  1. 使用 lambda 表达式

您可以使用 lambda 表达式来创建匿名函数并执行求和操作。

#include <iostream>

int main() {
int num1 = 90;
int num2 = 100;
int sum = [](int x, int y) { return x + y; }(num1, num2); cout << "The sum of " << num1 << " and " << num2 << " is: " << sum << endl;
return 0;
}

这些只是在 C++ 中相加两个数的一些方法。选择哪种方法取决于您的具体需求和喜好。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

C++ 异常处理机制详解:轻松掌握异常处理技巧的更多相关文章

  1. java异常处理机制详解

    java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...

  2. SpringMVC异常处理机制详解[附带源码分析]

    目录 前言 重要接口和类介绍 HandlerExceptionResolver接口 AbstractHandlerExceptionResolver抽象类 AbstractHandlerMethodE ...

  3. PHP中的错误处理、异常处理机制详解

    在编写PHP程序时,错误处理是一个重要的部分.如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门 例: <?php $a = fopen('test.txt','r'); / ...

  4. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  5. Linux内核异常处理体系结构详解(一)【转】

    转自:http://www.techbulo.com/1841.html 2015年11月30日 ⁄ 基础知识 ⁄ 共 6653字 ⁄ 字号 小 中 大 ⁄ Linux内核异常处理体系结构详解(一)已 ...

  6. 从mixin到new和prototype:Javascript原型机制详解

    从mixin到new和prototype:Javascript原型机制详解   这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...

  7. 浏览器 HTTP 协议缓存机制详解

    最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...

  8. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

  9. ThreadPoolExecutor运转机制详解

    ThreadPoolExecutor运转机制详解 - 走向架构师之路 - 博客频道 - CSDN.NET 最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看 ...

  10. Linux 内存机制详解宝典

    Linux 内存机制详解宝典 在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于 ...

随机推荐

  1. vue三种插槽

    1. 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件 . 2. 分类:默认插槽.具名插槽.作用域插槽 3. 使用方式: a.默认插 ...

  2. 浅谈 KingbaseES 和 SQLServer 中的 instead of 触发器

    本文基于Kingbase和SqlServer的INSTEAD OF 触发器主要功能特点进行对比浅析,同时针对SqlServer 的INSTEAD OF 触发器提出了多种kingbase环境的等价代码方 ...

  3. #循环节,gcd#JZOJ 5362 密码

    题目 询问一个排列\(A\)是否能够通过\(A_i=A_{A_i}\)得到, 同时还要满足给定的两个数通过加减或者交换能够得到已知的两个数 分析 下面的就是要保证\(\gcd\)相同,但是还有上面的操 ...

  4. centos部署Django二:项目上传及测试

    1. 上传项目 用 ftp 或者 sftp 上传项目到服务器. *:如果上传时,报各种错误,可以考虑下是不是服务器中文件夹权限的问题.如果是权限的问题,可以使用命令修改文件夹权限后在上传:chmod ...

  5. 鸿蒙HarmonyOS实战-ArkUI组件(Popup)

    一.Popup Popup组件通常用于在屏幕上弹出一个对话框或者浮动窗口.这个组件通常和其他组件一起用于用户界面的交互和反馈. Popup组件可以包含任何类型的组件或内容,比如文本.按钮.输入框.图片 ...

  6. web 报表工具如何自适应

    现在的报表用户已经不再将报表作为一个单纯的报表工具看待了,有时候也会当作页面工具来使用,这时为了页面显示工整美观,就需要报表能够自适应宽度.下面我们就基于润乾报表来讲一下是如何做到自适应展现报表. 产 ...

  7. 面向切面编程AOP[二](java @EnableAspectJAutoProxy 代码原理)

    前言 @EnableAspectJAutoProxy 是启动aop功能的意思,那么里面是什么呢? 正文 @Target({ElementType.TYPE}) @Retention(Retention ...

  8. 重新整理数据结构与算法(c#)——算法套路k克鲁斯算法[三十]

    前言 这个和前面一节有关系,是这样子的,前面是用顶点作为参照条件,这个是用边作为参照条件. 正文 图解如下: 每次选择最小的边. 但是会遇到一个小问题,就是会构成回路. 比如说第四步中,最小边是CE, ...

  9. redis和memcached的区别和使用场景

    Redis 和 Memcached 都是基于内存的数据存储系统.Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库.Redis是一个开源的key-value存储 ...

  10. 利用navicat 完成两台服务器之间的数据库迁移,安全可靠

    首先,准备工作先做好 1. 工具,navicat,我这里用的是navicat12+ 2. 建立两台服务器的链接,即新建链接,mysql,同时,需要在迁移目标服务器上面实现建立好对应的数据库,即如果有1 ...