Cpp Experiment -- try catch

c++中try catch的用法   在c++中,可以直接抛出异常之后自己进行捕捉处理,如:(这样就可以在任何自己得到不想要的结果的时候进行中断,比如在进行数据库事务操作的时候,如果某一个语句返回SQL_ERROR则直接抛出异常,在catch块中进行事务回滚(回滚怎么理解?))。 #include <iostream> #include <exception> using nam... 阅读详情

    如果没有try-catch语句,我们的函数可能只能靠返回负数之类的方式来表示出错,但这不是可以依靠的方法,因为很多函数的调用者根本不在意函数的返回值,没有强制的约束让调用者去处理函数发生的错误,而try-catch配上throw的方式则不同,如果用户不处理这些错误, 那么程序可能会死掉。下面就来测试一下C++中的try-catch语句。

    首先,try-catch语句是不止可以返回runtime-error,它可以返回任何值,如一个int或string,甚至任何用户自定义类型。

    throw一个int:

#include <iostream>

using namespace std;

void test()
{
    throw 10; 
}

int main()
{
    try 
    {   
        test();
    }   
    catch(int &a) 
    {   
        cout << a << endl;
    }   

    return 0;
}

    测试结果为:

    我们再定义一个class并让test2函数把它throw出来:

#include <iostream>

using namespace std;

void test()
{
    throw 10; 
}

class A
{
public:
    const char *a = "class";
};

int test2()
{
    A a;
    throw a;
}

int main()
{
    try 
    {   
        test2();
    }   
    catch(int &a) 
    {   
        cout << a << endl;
    }   
    catch(A &a) 
    {   
        cout << a.a << endl;
    }   

    return 0;
}

    下面是测试结果:

     可以看到类中的字符串被正确输出了。那么新的疑问来下,catch处理完后会继续执行try中的语句吗?我们在try语句中执行两个函数, 第一个是test函数,第二个是test2函数,我们看下处理完test中的throw后,会不会处理test2。

#include <iostream>

using namespace std;

void test()
{
    throw 10; 
}

class A
{
public:
    const char *a = "class";
};

int test2()
{
    A a;
    throw a;
}

int main()
{
    try 
    {   
        test();
        test2();
    }   
    catch(int &a) 
    {   
        cout << a << endl;
    }   
    catch(A &a) 
    {   
        cout << a.a << endl;
    }
    
    cout << "end" << endl;

    return 0;
}

    结果如下:

 

    如我们所见只输出了一个10,即catch执行完后不会继续执行try中的语句,而是直接执行catch之后的cout。

    最后,细心的朋友可能发现了,我们一直是用引用来接收throw出来的值的,这样合法么?从上面的结果看来,是合法的,我们接收到的值并输出了它们。但对于一般的return语句来说,这是不合法的,我们看下面的例子:

#include <iostream>

using namespace std;

int test3()
{
    return 10; 
}

int main()
{
    int &b = test3();
    cout << b << endl;
    return 0;
}

     结果是,无法通过编译,

    可见throw和return还是有区别的。可以直接用non-const引用来接收右值。但具体原理不详,如果有知道的大神可以在评论里回复下,或者等我哪天知道了再补。

Julia连接MongoDB实战:半结构化科学数据流的高效处理方案 在AI与IoT场景中,半结构化数据(如嵌套JSON、时序日志、模型元数据)日益成为主流,传统关系型数据库面临JOIN开销高、写入吞吐低、Schema僵化等瓶颈。MongoDB凭借灵活文档模型与高性能BSON协议,天然适配此类数据;而Julia以零成本抽象、多线程无GIL、原生类型系统著称,其DataFrames.jl与StructTypes.jl生态可实现DataFrame/struct到BSON文档的零样板映射。二者结合构成面向实时特征工程、LLM监控、生物信息学等场景的生产级数据工作流——本文聚焦Jul 阅读详情

相关推荐

MATLAB Online集成PyTorch与Git:跨语言AI工作流实践

在深度学习与科学计算领域,跨语言协作已成为提升开发效率的关键。通过Python接口调用外部库(如PyTorch)是常见的技术方案,它允许在统一环境中整合不同生态的优势。其核心原理是利用语言间的数据桥接与进程通信,实现模型加载、推理与数据交换。这种技术价值在于避免了环境切换的碎片化,尤其适合算法验证、模型部署与实验复现等场景。在工程实践中,结合版本控制系统(如Git)进行代码与实验管理,能显著提升工作流的可追溯性与协作效率。本文聚焦于在MATLAB Online这一云端平台中,通过配置Python虚拟环境、封

407

C++ try catch 异常处理

在执行C ++代码时,可能会发生不同的错误:程序员编写的编码错误,由于错误的输入引起的错误或其他不可预见的情况。C++ 中try块可以捕获测试代码块中的错误。catch块可以处理错误。本文主要介绍C++ try catch异常处理(Exception)。...

weixin_52026996的博客 1万+

MATLAB文件交换选择:从核心原理到工程实践的全方位指南

在科学计算与工程仿真领域,数据输入输出是算法实现和系统集成的基石。文件交换选择机制作为数据流转的关键环节,其核心原理在于实现异构数据格式的兼容性、处理流程的自动化以及不同工具链之间的无缝衔接。这一技术的工程价值在于提升数据处理效率、确保流程可靠性,并支撑复杂系统的可复现性。从基础的文本、二进制文件解析,到高级的HDF5、NetCDF等科学数据格式处理,稳健的文件选择逻辑是MATLAB生态中仿真流程、图像处理流水线和联合仿真(如ADAMS与MATLAB协同)等应用场景得以顺畅运行的前提。本文聚焦于MATLAB

weixin_30786657的博客 440

从零开始的CPP(24)异常捕获try catch

当数值过大时,stoi无法执行,所以要把stoi放进try中,如果有异常,就不执行,直接返回0。使用try catch ,即使出现异常,也不会影响后面程序的执行。如果反转后整数超过 32 位的有符号整数的范围。给你一个 32 位的有符号整数。中的数字部分反转后的结果。

m0_69248655的博客 370

PreScan自动化测试实战:用C++脚本构建批量仿真框架

在自动驾驶仿真测试中,PreScan作为场景建模与传感器仿真工具,常因手动操作繁琐而难以支撑批量验证与回归测试。C++脚本凭借其底层API访问能力与高性能优势,成为自动化测试框架的理想载体。通过理解PreScan的API层次结构(如ObjectAPI、SensorAPI、RunControlAPI),开发者可实现场景加载、仿真控制、数据采集与结果判定的全流程自动化。利用编译型仿真器CSE,测试程序可脱离MATLAB独立运行,大幅提升集成效率。本文从工程实践角度,介绍基于C++的模块化测试框架设计,涵盖参数化

weixin_33762130的博客 331

PHP+MYSQL宠物主题动态网页设计源码+数据库,大学生期末大作业,PHP课程设计

PHP+MYSQL宠物主题动态网页设计源码+数据库,大学生期末大作业,PHP课程设计提示:本文采用PHP对数据库进行操作:本文就介绍了PHP实现对MySQL数据库的增删改查操作基础内容。

901

C++ 异常处理(try catch)

在任何一门语言中都有异常的解释,这里就不做介绍了。 C++ 异常处理机制会涉及 try、catch、throw 三个关键字。 程序错误 程序的错误大致可以分为三种,分别是语法错误、逻辑错误和运行时错误: 1) 语法错误在编译和链接阶段就能发现,只有 100% 符合语法规则的代码才能生成可执行程序。语法错误是最容易发现、最容易定位、最容易排除的错误,程序员最不需要担心的就是这种错误。 2) 逻...

梦否 9622

STC32-USB-CAN:基于STC32G的国产双通道隔离CAN分析调试设备设计与实战

本文详细介绍了基于国产STC32G单片机设计双通道隔离CAN分析调试设备的全过程。该设备实现了双通道隔离CAN数据监控、中继转发及USB高速通信,并支持故障注入测试。核心采用全国产器件,通过实战测试验证了其在1Mbps波特率下长时间稳定工作的可靠性,为工程师提供了高性价比的CAN总线调试解决方案。

weixin_42465140的博客 97

try和catch的用法

语句中,程序执行一段代码,如果发生了异常,则会被捕获,并转到相应的。语句用于处理程序运行时可能发生的异常,以保证程序的稳定性和正确性。方法发生了异常,则会被捕获并输出一条错误消息。是用于处理异常的语句,它们构成了一种异常处理机制。例如,在下面的代码中,程序执行了一个方法。在上面的代码中,如果。

mingyuexingzuo的博客 5万+

使用循环神经网络预测温度

简介 本文以天气时间序列数据集为例,讨论如何使用深度学习模型预测未来天气温度。 使用的是由德国耶拿马克思普朗克生物地球化学研究所的气象站记录。 数据每10分钟记录一次,共记录14种不同的量,如气温、气压、湿度、风向等,原始数据可追溯到2003年,本例只使用2009-2016年的数据。 数据 下载并解压数据略。 加载数据: data_dir = r'E:\practice\tf2\temperature' fname = os.path.join(data_dir, 'jena_climate_2009_

guotianqing的博客 5282

前程无忧Python岗位数据采集:基于API直连的高效招聘信息爬取实战

本文介绍了一个基于Python requests库的前程无忧招聘数据采集系统。项目通过分析API接口结构,配置完整的请求头和身份验证参数,实现了高效稳定的数据采集。系统支持多页数据批量获取,包含工作名称、薪资范围等关键字段的结构化解析,并将结果存储为Excel文件。技术实现涉及API分析、身份验证、请求头配置、数据清洗等关键步骤,同时强调遵守法律和道德规范。该系统可为求职者、HR和市场分析师提供有价值的行业数据支持,适用于市场分析、职业规划等场景。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1553

终极C++ CSV解析指南:为什么rapidcsv是开发者的最佳选择?

还在为C++中处理CSV文件而烦恼吗?🤔 每次面对不同格式的逗号分隔值文件,是不是都要写一堆重复的解析代码?今天我要告诉你一个好消息——rapidcsv这个C++ CSV解析库,能让你的数据处理工作变得前所未有的简单高效! rapidcsv是一个专为C++设计的轻量级CSV解析神器,采用单头文件设计,无需复杂的构建过程,只需包含一个头文件就能立即使用。想象一下,CSV文件就像一堆杂乱无章的积木

gitblog_00072的博客 409

第95章 安全工程师:Shell 脚本实现安全扫描、漏洞检测、日志审计

随着网络安全威胁日益复杂,传统的手动安全管理已无法满足现代企业的安全需求。Shell 脚本为安全工程师提供了强大的自动化能力,能够实现 7×24 小时的安全监控、快速漏洞扫描、智能日志分析和实时威胁响应。本章将系统介绍如何使用 Shell 脚本构建完整的安全防护体系,从基线检查到实时监控,帮助你打造自动化的安全运维能力。

猪猪侠 91

如何高效解析CSV数据:C++开发者的rapidcsv完全实战指南

你是否曾在C++项目中为处理CSV文件而烦恼?面对金融数据、科学实验结果、电商销售记录等各种格式的CSV文件,编写复杂的解析代码既耗时又容易出错。今天,我将为你介绍一款简单高效的C++ CSV解析神器——rapidcsv,它能让你的数据处理工作变得轻松愉快! ## 一、问题场景:为什么我们需要专门的CSV解析库? 想象一下,你正在开发一个股票分析系统,需要从CSV文件中读取每日股价数据。或者你

gitblog_01026的博客 401

Android Framework AudioFlinge 面试题及参考答案

请解释什么是 AudioFlinger? AudioFlinger 是 Android 音频系统中的一个关键服务。它位于 Android 系统的中间层,是连接上层应用和底层音频硬件驱动的重要桥梁。从功能角度来讲,它主要负责音频数据的混合(Mix)以及输出(Output)。 当多个应用程序同时播放音频时,比如一个音乐播放器在播放歌曲,同时手机的闹铃响起,AudioFlinger 就会发挥它的混合功能。它会把这些不同来源的音频数据按照一定的规则和算法混合在一起。这种混合并不是简单的相加,而是要考

大模型大数据攻城狮的专栏 1577

第二十一:Python接口自动化-处理Json数据

【代码】第二十一:Python接口自动化-处理Json数据。

欢迎来到本博客! 111

Rapidcsv终极指南:如何在3分钟内掌握C++ CSV解析神器

你是否曾为C++项目中繁琐的CSV文件处理而头疼?面对格式各异的逗号分隔值文件,手动解析不仅耗时费力,还容易出错。今天,我要为你介绍一款能彻底解决这些问题的神器——rapidcsv。这是一个专为C++设计的轻量级CSV解析库,采用单头文件设计,无需复杂构建过程,让你在3分钟内就能开始高效处理CSV数据。 想象一下,CSV解析就像整理杂乱的办公桌——原始数据是散落各处的文件,而rapidcsv就是

gitblog_01050的博客 499

【txt文本加密】使用 cryptography 库实现加密和解密

cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2668

C++17新特性实战:结构化绑定、optional与variant提升代码质量

现代C++编程中,类型安全和代码可维护性是提升软件质量的核心诉求。通过编译期检查与强类型系统,开发者能够构建更健壮的应用程序,减少运行时错误。C++17引入的实用特性如结构化绑定、std::optional和std::variant,正是这一理念的工程实践体现。结构化绑定简化了多返回值处理,提升代码可读性;std::optional明确表达可选值语义,消除空指针歧义;std::variant实现类型安全联合体,配合std::visit实现编译期多态。这些特性共同作用于游戏开发、系统编程等场景,让开发者能够更

weixin_30896825的博客 364

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

5分钟掌握C++ CSV解析库:快速数据处理的终极方案

在处理C++项目中的数据导入导出时,CSV文件格式的解析往往成为开发者的痛点。今天我要介绍的rapidcsv库,正是解决这一问题的完美方案。这个轻量级、高性能的C++ CSV解析库,让数据处理变得简单高效,彻底告别繁琐的解析代码。 ## 🚀 为什么选择rapidcsv? 想象一下,你需要从股票交易记录、传感器数据或用户日志中提取信息。传统方法需要编写大量解析代码,处理逗号、引号、换行符等各种

gitblog_00029的博客 388

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Cocos Engine跨平台SDK集成实战指南:从架构设计到多平台部署

还在为Cocos Engine项目集成广告变现和数据分析SDK而烦恼吗?作为游戏开发者,你一定经历过SDK冲突、平台兼容性差、性能开销大等痛点。本文将从架构设计入手,通过模块化封装、统一接口抽象和跨平台适配,帮你彻底解决这些集成难题! ## 🎯 Cocos Engine跨平台架构深度解析 Cocos Engine作为开源跨平台游戏引擎,提供了完善的跨平台适配架构,其核心设计理念是通过平台抽象

gitblog_00030的博客 384

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NetLogo接口优化与多主体建模实践

多主体建模是复杂系统仿真的核心技术,NetLogo作为该领域的经典工具,其接口优化能显著提升建模效率。通过JVM插件体系实现功能扩展,开发者可以突破原生环境限制,集成数据库、可视化库等外部组件。技术实现上涉及Extension API、JNI本地调用和RPC通信等多层架构,实测性能提升可达80%以上。典型应用场景包括疫情传播预测、城市交通流分析等社会科学仿真,其中与TensorFlow等机器学习框架的混合编程尤为关键。合理的对象复用和异步处理策略能有效解决大规模agent模拟时的性能瓶颈。

weixin_33898876的博客 280

MATLAB数据组织:结构体数组与数组结构体的性能对比与选型指南

在科学计算与数据处理中,数据结构的选择直接影响程序性能与内存效率。结构体数组以记录为中心组织数据,符合直观的对象思维,适合处理异构记录和动态字段。而数组结构体则以属性为中心,将同类数据连续存储,天然支持向量化操作,能极大提升CPU缓存命中率和计算吞吐量。这两种范式在内存布局上存在根本差异,前者可能导致数据访问不连续,后者则优化了批量数值运算。在MATLAB工程实践中,理解AoSoA与SoA的原理差异,对于数据分析、信号处理和算法仿真等场景至关重要。本文通过性能测试量化了二者差异,并探讨了在向量化操作、内存管

weixin_30372371的博客 307

ROS2实用工具

1. 将ROS2的Bag文件转换为CSV、JSON等1. 将ROS2的Bag文件转换为CSV、JSON等。

caokaifa的博客 4329

CANN/GE DataFlow Python开发专题指南

目前有两种方式来进行UDF开发: - 通过注解创建UDF,即通过dataflow.pyflow或者dataflow.method装饰函数进行UDF开发。 - 通过创建UDF工程进行UDF开发。 两种方式的区别如下表: |比较项|通过注解创建UDF|通过工程创建UDF| |--|--|--| |优缺点|优点:使用方式简单直接,通过注解的方式即可将任意代码逻辑封装成UDF。无需额外修改用户代码的

gitblog_00889的博客 736

CANN/GE DataFlow Python专题指南

目前有两种方式来进行UDF开发: - 通过注解创建UDF,即通过dataflow.pyflow或者dataflow.method装饰函数进行UDF开发。 - 通过创建UDF工程进行UDF开发。 两种方式的区别如下表: |比较项|通过注解创建UDF|通过工程创建UDF| |--|--|--| |优缺点|优点:使用方式简单直接,通过注解的方式即可将任意代码逻辑封装成UDF。无需额外修改用户代码的

gitblog_00886的博客 490
上一篇: Cpp 使用宏输出变量名——鸡肋
下一篇: Cpp Experiment -- sizeof and array
DonZpp
博客等级 码龄11年 3粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值