当前位置: 首页 > wzjs >正文

钓鱼网站 企业形象任务发布插件wordpress

钓鱼网站 企业形象,任务发布插件wordpress,wordpress分类显示图片,石家庄公司网络建设博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x1f…

博主介绍:程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😉C++基础系列专栏
    😃C语言基础系列专栏
    🤣C++大佬养成攻略专栏
    🤓C++训练营
    👉🏻个人网站

异常处理是一项重要的特性,它允许程序在运行时遇到错误条件时能够优雅地恢复或终止执行,而不是简单地崩溃。

C++通过trycatchthrow三个关键字来实现异常处理机制。本文会详细介绍。

基本概念

定义

异常是指在程序执行过程中发生的、不符合程序正常流程的事件。在C++中,异常通常是由于某些错误条件触发的,如除以零、数组越界、内存分配失败等。

关键字

  • try:用于标记可能会抛出异常的代码块,称为保护代码。
  • throw:当检测到异常条件时,使用throw关键字抛出一个异常。throw后面可以跟任意表达式,它的类型决定了抛出的异常类型。
  • catch:用于捕获并处理异常。catch块紧跟在try块之后,并指定了要捕获的异常类型。

用法

下面是一个简单的例子,演示了如何使用trythrowcatch来处理除以零的异常:

#include <iostream>
using namespace std;double division(int a, int b) {if (b == 0) {throw "Division by zero!"; // 抛出异常}return (a / b);
}int main() {int x = 50;int y = 0;double z = 0;try {z = division(x, y); // 可能抛出异常的代码cout << z << endl;} catch (const char* msg) { // 捕获并处理异常cerr << msg << endl;}return 0;
}

在这个例子中,如果y为零,division函数将抛出一个字符串异常,该异常在main函数的catch块中被捕获并处理。

一个try块可以跟随多个catch块,来捕获多种不同类型的异常:

#include <iostream>
#include <stdexcept> // 包含标准异常类
using namespace std; // 为了演示方便,项目中不建议这样使用void testFunction() {throw runtime_error("Runtime error occurred!");
}int main() {try {testFunction(); // 可能抛出异常的函数} catch (const logic_error& e) {cout << "Caught a logic_error: " << e.what() << endl;} catch (const runtime_error& e) {cout << "Caught a runtime_error: " << e.what() << endl;} catch (...) { // 捕获所有其他类型的异常cout << "Caught an unknown exception" << endl;}return 0;
}

testFunction抛出了一个runtime_error异常,该异常在第二个catch块中被捕获并处理。最后一个catch块使用省略号...来捕获所有其他类型的异常。

C++标准异常类

C++标准库提供了一系列预定义的异常类,这些类都继承自std::exception基类。

使用标准异常类可以使代码更加清晰。

层次结构

如图

暂时无法在飞书文档外展示此内容

  • std::exception:所有标准异常的基类。
  • std::bad_alloc:内存分配失败时抛出。
  • std::bad_cast:动态类型转换失败时抛出。
  • std::bad_typeid:使用typeid运算符失败时抛出。
  • std::bad_exception:在函数声明中使用了异常规格,但抛出了未列出的异常时抛出(C++11已弃用)。
  • std::logic_error:逻辑错误异常基类,包括:
    • std::domain_error:数学域错误,如sqrt(-1)。
    • std::invalid_argument:无效参数错误。
    • std::length_error:超出允许长度的错误。
    • std::out_of_range:范围错误,如访问vector的非法索引。
  • std::runtime_error:运行时错误异常基类,包括:
    • std::overflow_error:上溢错误。
    • std::range_error:范围错误(与std::out_of_range不同,用于其他情况)。
    • std::underflow_error:下溢错误。

示例

#include <iostream>
#include <stdexcept>
using namespace std;void testLogicError() {throw invalid_argument("Invalid argument error!");
}void testRuntimeError() {throw out_of_range("Out of range error!");
}int main() {try {testLogicError(); // 抛出逻辑错误异常} catch (const logic_error& e) {cout << "Caught a logic_error: " << e.what() << endl;}try {testRuntimeError(); // 抛出运行时错误异常} catch (const runtime_error& e) {cout << "Caught a runtime_error: " << e.what() << endl;}return 0;
}

testLogicError函数抛出了一个invalid_argument异常,而testRuntimeError函数抛出了一个out_of_range异常。这两个异常分别在对应的catch块中被捕获并处理。

自定义异常类

虽然C++标准库提供了丰富的异常类,但在某些情况下,开发者可能需要定义自己的异常类。

我们可以通过继承std::exception基类并重载what方法来实现。

示例

#include <iostream>
#include <exception>
#include <string>
using namespace std;class MyException : public exception {
public:
MyException(const string& message) : message_(message) {}virtual const char* what() const noexcept override {return message_.c_str();
}private:
string message_;
};void testCustomException() {throw MyException("Custom exception occurred!");
}int main() {try {testCustomException(); // 抛出自定义异常} catch (const MyException& e) {cout << "Caught a MyException: " << e.what() << endl;} catch (const exception& e) {cout << "Caught an unknown exception: " << e.what() << endl;}return 0;
}

MyException类继承自std::exception并重载了what方法。testCustomException函数抛出了一个MyException异常,该异常在main函数的catch块中被捕获并处理。

注意,这里还添加了一个捕获所有其他std::exception子类的catch块,确保能够捕获所有未知异常。

noexcept

从C++11开始,推荐使用noexcept关键字来声明函数不抛出任何异常:

void func() noexcept; // 声明函数不抛出任何异常

如果func函数在执行过程中抛出了异常,程序会直接终止。noexcept关键字还可以用于提高性能,因为编译器可以优化不抛出异常的函数调用。

如果你看过gcc源码,你会发现,基本上通篇都是noexcept

noexcept会告诉编译器,它修饰的函数不会产生异常(exception),这有利于编译器做更多的优化。

C++的异常处理是在运行时检测的,而不是在编译时检测,为了运行时检测,编译器应该会做些额外的操作,如果能够通过noexcept明确的告诉编译器这个函数不会抛出异常,编译器应该会做一些优化。

验证函数是否noexcept

noexcept还可以当作运算符,它可以传入参数,来验证某个函数是否是noexcept

void may_throw();
void no_throw() noexcept;
int main() {noexcept(may_throw()); // falsenoexcept(no_throw()); // true}

什么时候使用noexcept

  • 移动构造函数,移动赋值函数,建议使用noexcept修饰,因为搭配标准库使用时,noexcept作用巨大,它可以优先移动而非拷贝,推荐阅读 move_if_noexcept。
  • 而析构函数默认就是noexcept的,不需要显式指定noexcept
  • 在明确确认某个函数不会产生exception时,可以使用noexcept

推荐看看这几个noexcept相关的文档:

  • https://www.cnblogs.com/sword03/p/10020344.html
  • https://en.cppreference.com/w/cpp/language/noexcept_spec
  • https://en.cppreference.com/w/cpp/language/noexcept
  • https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Re-noexcept
  • https://stackoverflow.com/questions/10787766/when-should-i-really-use-noexcept
  • https://www.heise.de/blog/C-Core-Guidelines-Der-noexcept-Spezifier-und-Operator-4121657.html

异常安全性

异常安全性是指程序在遇到异常时仍然能够保持正确的状态,不会出现资源泄露或者数据不一致等问题。

因为C++允许程序在执行过程中抛出异常,这可能导致程序的控制流发生变化,如果资源管理不当,就可能出现资源泄露或程序崩溃等问题。

码字不易,欢迎大家点赞关注评论,谢谢!


C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!


文章转载自:

http://ATBXD5BD.zqcdL.cn
http://n16uejqx.zqcdL.cn
http://llMPUgFn.zqcdL.cn
http://OZe4EESb.zqcdL.cn
http://zXyKPwZG.zqcdL.cn
http://N0v75c6g.zqcdL.cn
http://7ahM7Iuc.zqcdL.cn
http://ARTNQsQW.zqcdL.cn
http://t13fwANF.zqcdL.cn
http://PSFxPVKP.zqcdL.cn
http://V6B5i9h9.zqcdL.cn
http://gAO1MO6Y.zqcdL.cn
http://BPMXJzTP.zqcdL.cn
http://HgJQBaeG.zqcdL.cn
http://ZQ5ffpGr.zqcdL.cn
http://K3erYiyk.zqcdL.cn
http://VMl7S86c.zqcdL.cn
http://dvuvbDI0.zqcdL.cn
http://YQvTTMKL.zqcdL.cn
http://eUCyoyYS.zqcdL.cn
http://UQnDmSuQ.zqcdL.cn
http://EW57iSoj.zqcdL.cn
http://0cltJMvM.zqcdL.cn
http://4032lORC.zqcdL.cn
http://mZiTkGf1.zqcdL.cn
http://7Zn0UDym.zqcdL.cn
http://M0cjZMPx.zqcdL.cn
http://dRLlisCj.zqcdL.cn
http://i9jOFAeu.zqcdL.cn
http://mDmtaizd.zqcdL.cn
http://www.dtcms.com/wzjs/748220.html

相关文章:

  • 扁平化色块风格的网站有没类似建设通的免费网站
  • 大连小程序制作开发seo推广公司排名
  • 江西专业的网站建设制作深圳网站建设的
  • 个人如何做短视频网站十大互联网公司排名
  • 网站流量突然增加中国空间站完成图
  • 嘉兴网站设计网站建设忘记密码邮箱设置
  • 杰恩设计网站是谁做的大濮网
  • 襄阳微网站建设营销型网站建设供货商
  • zencart 官方网站课程网站建设的设计报告
  • 网站建设哪家较好自己做网站卖仿货
  • 部门网站建设怎么做中国最新新闻
  • 网站建设教育机构网络文化经营许可证价格
  • 专业网站建设网站价格wordpress 当前栏目id
  • 网站 dns 解析seo先上排名后收费
  • 长沙seo公司网站优化无代码快速搭建网站
  • 百度xml网站地图网站上面的水印怎么做的
  • 域名是网站吗邮件网站排名
  • 新闻源代发网站怎么做优惠做网站
  • 河源网站页面优化ppt小型人力资源公司注册
  • 建筑人才招聘哪个网站最好能下短视频网站做牙
  • 公司网站模板 网盘下载自己做的网站是怎么赚钱
  • rio门户网站的制作合肥的网站建设州
  • 静态网站登陆怎么做设计公司官网首页
  • 直播网站怎么做的企业网站 seo怎么做
  • 现在做网站建设都是自建wordpress中国风主题下载
  • 龙井网站建设服务好的高端网站建设企业
  • 泽州县住房保障和城乡建设局网站ip或域名查询网
  • 跨国网站浏览器安徽企业网站制作
  • 做网站 宁波nat123做视频网站
  • 电子商务网站建设 市场分析软件技术专业介绍及就业方向