C++如何实现自定义异常信息输出

通过继承std::exception并重写what()方法可自定义异常信息输出,支持静态消息、使用runtime_error简化实现及动态拼接行号函数名等详细信息,提升错误描述能力与程序可维护性。

c++如何实现自定义异常信息输出

在C++中,自定义异常信息输出主要通过继承标准异常类 std::exception 或其派生类(如 std::runtime_error),并重写 what() 方法来实现。这样可以在抛出异常时提供更具描述性的错误信息。

1. 继承 std::exception 并重写 what() 方法

最常见的方式是定义一个类,继承自 std::exception,并在类中实现自己的 what() 函数,该函数返回一个C风格字符串(const char*)。

示例:

#include #include #include 

class MyException : public std::exception {private:std::string msg;public:MyException(const std::string& message) : msg(message) {}

const char* what() const noexcept override {    return msg.c_str();}

};

立即学习“C++免费学习笔记(深入)”;

// 使用示例void test() {throw MyException("这是一个自定义异常信息");}

int main() {try {test();} catch (const std::exception& e) {std::cout

输出结果:

捕获异常: 这是一个自定义异常信息

2. 使用 std::runtime_error 等标准异常类(推荐简单场景)

如果不需要复杂的逻辑,可以直接使用 std::runtime_error,它接受字符串作为构造参数,并自动提供 what() 的实现。

示例:

#include #include 

void risky_function() {throw std::runtime_error("文件打开失败");}

int main() {try {risky_function();} catch (const std::exception& e) {std::cout << "错误: " << e.what() << std::endl;}return 0;}

3. 支持动态信息拼接的自定义异常

有时需要根据运行时数据生成异常信息,比如包含行号、函数名或变量值。可以通过构造函数传参并格式化字符串实现。

示例:带行号和消息的异常

#include #include #include 

class DetailedException : public std::exception {private:std::string info;public:DetailedException(const std::string& msg, int line, const std::string& func){std::ostringstream oss;oss << "[" << func << ": " << line << "] " << msg;info = oss.str();}

const char* what() const noexcept override {    return info.c_str();}

};

立即学习“C++免费学习笔记(深入)”;

// 宏简化使用

define THROW_DETAILED(msg)

throw DetailedException(msg, __LINE__, __func__)

void problematic() {THROW_DETAILED("数值超出范围");}

int main() {try {problematic();} catch (const std::exception& e) {std::cout

输出可能为:

详细错误: [problematic: 38] 数值超出范围

基本上就这些。通过继承和重写 what(),你可以灵活控制异常信息的生成和输出,既满足调试需求,也提升程序的可维护性。

以上就是C++如何实现自定义异常信息输出的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1474730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C++如何在STL中实现容器与数组互操作
上一篇 2025年12月18日 21:49:41
C++如何实现工厂模式创建对象
下一篇 2025年12月18日 21:50:02

相关推荐

  • 阿里夸克发布AI眼镜!仅需三千出头!

    阿里夸克发布AI眼镜!仅需三千出头!阿里夸克发布AI眼镜!仅需三千出头!阿里夸克发布AI眼镜!仅需三千出头!阿里夸克发布AI眼镜!仅需三千出头!

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 最近,夸克正式发布了其首款AI智能眼镜,并全面启动了各渠道的预售。如果你是88VIP会员,还能享受早鸟优惠价,仅需3329.1元就能入手这款科技新品。 抛开价格不谈,这款眼镜最引人注目的亮点在于…

    2026年9月8日 用户投稿
    100
  • iPhone 17 Pro使用测评

    iPhone 17 Pro使用测评iPhone 17 Pro使用测评iPhone 17 Pro使用测评iPhone 17 Pro使用测评

    iPhone 17 Pro使用测评 随着科技的不断进步,智能手机的功能和性能也在不断提升。今天,我们将对即将发布的iPhone 17 Pro进行全面测评,从外观设计、摄像头性能、电池续航到硬件配置,全方位解析这款备受期待的新品。 外观设计与材质 iPhone 17 Pro采用了热锻铝金属一体成型机身…

    2026年9月8日 用户投稿
    200
  • 淘宝小时达是快递还是外卖?送货上门吗?揭秘200+城市全城急送,3公里30分钟必达的新零售革命!

    淘宝小时达是快递还是外卖?3公里急速配送背后的新零售革命 当你在淘宝搜索”小时达”服务时,可能产生这样的困惑:这到底是像顺丰一样的快递服务,还是像美团外卖般的即时配送?淘宝小时达既不是传统快递也不是单纯外卖,而是融合仓储、即时配送与大数据的新零售模式。依托智能仓储系统和3公里配送网络,这项服务能实现…

    2026年9月8日
    100
  • 如何在mysql中拼接字符串字段

    使用CONCAT()函数可拼接字符串字段,如SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name FROM users;若字段可能为NULL,推荐使用CONCAT_WS()或IFNULL()避免结果为NULL,例如CON…

    2026年9月8日
    100
  • Grok 正式推出新虚拟女友角色 “Mika”

    埃隆・马斯克旗下的 xAI 团队最近再次成为焦点,其人工智能聊天平台 Grok 正式上线了一位全新的虚拟女友角色——“Mika”。 Mika 的形象设计融合了多个经典二次元人物的特质,灵感主要来自草薙素子、Lucy 和山田凉。她身穿黑色皮夹克与牛仔裤,拥有一头引人注目的深绿色长发,整体造型散发出强烈…

    2026年9月8日
    100
  • win11怎么查看主板型号_Win11主板型号查看方法

    通过系统信息工具(msinfo32)可查看主板型号和BIOS版本;2. 使用命令提示符执行wmic命令快速获取主板产品、制造商等信息;3. 在设备管理器中查找系统设备相关条目间接识别主板;4. 开机进入BIOS/UEFI界面查看最原始的主板型号信息。 如果您需要了解计算机的核心硬件信息,特别是主板型…

    2026年9月8日
    100
  • 淘宝百亿补贴那么便宜是不是假货?是平台补贴吗?淘宝百亿补贴便宜到离谱?是假货还是真补贴?3招教你识破套路,安心捡漏!

    淘宝百亿补贴的iphone比官网便宜2000元、大牌美妆低至3折,如此诱人的价格让人既心动又忐忑——这到底是平台真金白银的让利,还是暗藏假货猫腻?其实,这些低价并非噱头,而是淘宝联合品牌与商家共同让利的真实体现。通过严格的准入审核、ai智能防伪系统以及“假一赔十”的强力售后保障,平台已实现正品率高达…

    2026年9月8日
    100
  • 投喂AI最新官方访问地址 投喂AI平台主页直达链接入口

    投喂AI最新官方访问地址为https://www.p2hp.com,该平台集成多种AI工具,支持自然语言指令、快速文本生成与多格式内容输出,页面简洁且无需注册即可使用基础功能。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 投喂AI最新官方…

    2026年9月8日
    100
  • 云计算会最终取代本地高性能计算机吗?

    云计算不会完全取代本地高性能计算机,两者将互补共存。云计算在灵活性、成本和扩展性方面优势明显,适用于AI训练、大数据分析等场景;而本地HPC在超低延迟、数据安全和持续高强度计算任务中不可替代,如气象模拟、核聚变研究等;当前趋势是融合发展,混合云、边缘计算与HPC即服务等模式兼顾弹性与性能,选择取决于…

    2026年9月8日
    800
  • VS Code任务系统实战:自动化构建与部署流程剖析

    VS Code任务系统通过tasks.json实现本地自动化,支持编译、测试、部署等流程。配置label、command、args等字段可定义任务,利用dependsOn串联步骤,结合problemMatcher解析错误,配合rsync或scp脚本完成服务器推送,提升开发效率。 在现代开发流程中,自…

    2026年9月8日
    300
  • BigQuery Java客户端会话管理:实现跨查询临时表操作

    本文详细介绍了如何在bigquery java客户端中有效管理会话,以支持跨多个查询操作临时表。核心在于理解会话的创建机制,并学会从首次创建会话的查询任务中提取会话id,然后将其显式应用于后续查询,从而确保所有操作都在同一会话上下文中执行,避免临时表查找失败的问题。 在BigQuery中,会话(Se…

    2026年9月8日
    100
  • 《光环:战役进化》确认没有PVP!专注四人合作体验

    近日,halo studios正式宣布,即将推出的《光环:战役进化》将不包含玩家对战(pvp)模式。这一决定意味着该系列标志性的多人竞技元素将不会出现在此次重制版本中。游戏预计于2026年登陆ps5、xbox series x/s以及pc平台。 执行制作人戴蒙·康恩在媒体采访中解释了这一设计选择:“…

    2026年9月8日
    000
  • 被骗了47年!经典《太空侵略者》越打越快真相:竟是Intel 8080性能瓶颈

    10月27日消息,在电子游戏发展史上,有一个广为流传的经典案例:原本是技术限制导致的“缺陷”,最终却演变成了令人上瘾的游戏机制——这正是街机神作《太空侵略者》中逐渐加快的游戏节奏。 最近,自称精通C/C++的开发者Zuhaitz揭秘指出,《太空侵略者》那令人窒息的加速体验,并非设计者的刻意为之,而是…

    2026年9月8日
    100
  • 构建全NVMe固态硬盘RAID阵列需要满足哪些硬件与驱动程序条件?

    需确保主板芯片组(如Intel Z690、AMD X570)支持并开启BIOS中的VMD等功能,安装对应驱动后在UEFI中配置RAID模式。 构建全NVMe固态硬盘RAID阵列需要确保平台在硬件、固件和驱动层面都具备相应支持,因为NVMe设备不同于传统SATA SSD,其基于PCIe通道并绕过传统存…

    2026年9月8日
    300
  • PCIe通道拆分技术对多设备扩展的意义?

    PCIe通道拆分技术通过将一个x16插槽逻辑拆分为多个窄带宽通道(如四个x4),实现单插槽连接多设备,提升扩展灵活性;它依赖CPU原生通道与BIOS协同,在高性能存储、多GPU计算、数据采集等场景中发挥关键作用,但需注意带宽分配、主板及CPU支持、散热与电源等限制因素。 PCIe通道拆分技术,在我看…

    2026年9月8日
    100
  • AI视频快速生成工具 AI一键生成视频在线平台

    AI一键生成视频在线平台推荐Vidu,其支持文生视频,数秒内生成1080P高清内容,具备高连贯分镜逻辑与自然动作表现,适配多平台比例并提供丰富视觉风格,操作简单高效。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ AI视频快速生成工具AI一…

    2026年9月8日
    300
  • 如何在Java项目中配置环境以启用日志系统

    首先引入SLF4J与Logback依赖,再创建logback.xml配置文件定义日志格式和级别,接着在代码中通过LoggerFactory获取Logger实例并使用,最后可根据环境调整日志级别或添加文件输出。 在Java项目中启用日志系统,关键在于引入合适的日志框架并正确配置相关依赖和配置文件。目前…

    2026年9月8日
    100
  • 华为MatePad Pro流金典藏版开卖:鸿蒙最强生产力平板 7799元

    10月27日,华为终端官方宣布,华为matepad pro 12.2英寸流金典藏版正式发售,售价为7799元。 该典藏套装包含:MatePad Pro 12.2英寸2025柔光版WiFi 16GB+1TB流金配色、星跃键盘砚黑金版本,以及M-Pencil Pro雪域白手写笔。 在核心配置方面,新品搭…

    2026年9月8日
    100
  • 如何在mysql中开发餐饮点餐系统数据库

    答案:餐饮点餐系统需设计users、categories、dishes、tables、orders、order_items和bills七张核心表,通过外键关联实现菜品管理、订单处理与账单结算。 开发一个餐饮点餐系统的MySQL数据库,核心是设计清晰、结构合理的数据表,支持菜品管理、订单处理、用户信息…

    2026年9月8日
    100
  • 柒开得胜!iGame 柒小希首发纪念版硬件套装正式开售

    柒开得胜!iGame 柒小希首发纪念版硬件套装正式开售柒开得胜!iGame 柒小希首发纪念版硬件套装正式开售柒开得胜!iGame 柒小希首发纪念版硬件套装正式开售柒开得胜!iGame 柒小希首发纪念版硬件套装正式开售

    在赛博都市霓虹闪烁与数据流交织的虚实交界处,国创新生代高端硬件品牌 igame 正式揭幕其全新虚拟ip代言人——柒小希(senna),她突破次元壁,携首套限量发售的纪念版硬件套装登陆现实世界。此次发布的柒小希首发纪念套装涵盖显卡、主板与机箱三大核心部件,以统一的红白视觉主题贯穿整体设计,实现美学表达…

    2026年9月8日 用户投稿
    000

发表回复

登录后才能评论
关注微信