游戏开发之C++异常(C++)

1.异常的基础概念

  • 异常处理就是处理程序中的错误。
  • 所谓错误就是指程序运行过程中发生的一些错误。如:除0溢出、数组下标越界、所要读取的文件不存在、空指针、野指针、内存不足等。
  • TIPS:异常在C++的项目实例中一般不推荐使用。

2.异常在C++中的语法

 try{throw 数据;//抛出异常}catch(数据类型 变量名)//根据数据类型捕获异常{}catch(...)//...表示可捕获任意类型的异常{}

3.异常的使用

3.1 整型异常

#include <iostream>
using std::cout;
using std::endl;
using std::cin;int main()
{try{int a = 10;int b = 0;if (b == 0)throw 1;//捕获一个整数异常a / b;cout << "Hello" << endl;}catch (int err)//获取抛出的整数异常{cout << "code:" << err << endl;}catch (...)//万能捕获参数{cout << "万能异常捕获" << endl;}return 0;
}


注释catch (int err)之后:

3.2 字符串异常

#include <iostream>
using std::cout;
using std::endl;
using std::cin;int main()
{try{throw("hello A");}catch (int err)//获取抛出的整数异常{cout << "code:" << err << endl;}catch (const char * err)//获取抛出的字符串{cout << "str:" << err << endl;}catch (...)//万能捕获参数{cout << "万能异常捕获" << endl;}return 0;
}

4.栈的解旋/资源回收

  异常被抛出后,从进入try模块起到异常被抛掷前,这期间在栈上构造的所有对象都会被自动析构。析构的顺序与构造的顺序是相反的。这一过程被称为栈的解旋(unwinding)

class A
{public:A() { std::cout << __FUNCTION__ << std::endl; }~A() { std::cout << __FUNCTION__ << std::endl; }
};
int main()
{try{A a;throw 100;// 抛出异常}catch (int err) //捕获整型异常{printf("错误代码%d\n", err);}catch (...)// 捕获任意类型异常{  }return 0;
}

5.C++标准异常库(exception)

#include <exception>//C++异常头文件

5.1 抛出标准异常

5.1.1 抛出基础类型异常

#include <iostream>
#include <exception>//C++异常头文件
using std::cout;
using std::endl;
using std::cin;int main()
{try{throw std::exception("Hello exception");//抛出异常}catch (int err)//获取抛出的整数异常{cout << "code:" << err << endl;}catch (const char * err)//获取抛出的字符串{cout << "str:" << err << endl;}catch (std::exception& err)//获取抛出的异常{cout << "code: " << err.what() << endl;//what()可以输出错误信息}catch (...)//万能捕获参数{cout << "万能异常捕获" << endl;}return 0;
}

5.1.2 抛出类异常

TIPS:类异常是可以被继承的。

#include <iostream>
#include <exception>//C++异常头文件
using std::cout;
using std::endl;
using std::cin;//异常类可以被继承class A :public std::exception{public:A(const char *str) :std::exception(str){}};int main(){try{throw A("hello Exception A");//使用A类抛出异常}catch (int err)//获取抛出的整数异常{cout << "code:" << err << endl;}catch (A& err)//A类继承异常类,可以捕获其异常{cout << "A code: " << err.what() << endl;}catch (const char * err)//获取抛出的字符串{cout << "str:" << err << endl;}catch (std::exception& err)//获取抛出的异常{cout << "code: " << err.what() << endl;}catch (...)//万能捕获参数{cout << "万能异常捕获" << endl;}return 0;
}

5.2 函数抛出异常

 #include <iostream>#include <exception>//C++异常头文件using std::cout;using std::endl;using std::cin;//函数抛出异常的方式//1.默认向外抛出所有异常void func1(){throw "err==func1";//抛出一个字符串异常}//2.不向外抛出任何异常void func2() throw(){throw "err==func2";}//3.抛出指定类型的异常 int charvoid func3() throw(int, char){throw "err==func3";}int main(){try{func1();//func2();//func3();}catch (int err)//获取抛出的整数异常{cout << "code:" << err << endl;}catch (const char * err)//获取抛出的字符串{cout << "str:" << err << endl;}catch (std::exception& err)//获取抛出的异常{cout << "code: " << err.what() << endl;}catch (...)//万能捕获参数{cout << "万能异常捕获" << endl;}return 0;
}

游戏开发之C++异常(C++)相关推荐

  1. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

  2. Android 系统(55)---Android App开发之ANR异常的原因分析及处理总结

    Android App开发之ANR异常的原因分析及处理总结 Android App开发之ANR异常的原因分析及处理总结 ANR的全称是application not responding,根据它的意思 ...

  3. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  4. 游戏开发之U3D实现技能图标冷却的效果

    游戏开发之U3D实现技能图标冷却的效果 --本次使用的NGUI插件.     制作思路:NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使 ...

  5. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  6. DirectX游戏开发之2D文字的实现

    DirectX游戏开发之2D文字的实现 文字是承载信息最有效的载体之一,各种游戏程序都离不开文字的显示.对于3D文字来说,2D文字有其渲染的高效性和实现的简洁性. 2D文字的显示无论在写2D游戏还是在 ...

  7. 游戏开发之U3D插件EasyTouch5.x使用

               游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...

  8. 微信小游戏开发之CocosCreator多分辨率场景适配方案

    主题 Cocos Creator不同手机分辨率的背景图像和场景内容适配 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文 ...

  9. libGDX游戏开发之Box2D(十四)

    libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...

  10. JAVA游戏开发之FPS精准控制

    目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2       FPS精准控制... 3 2.1        FPS描述. ...

最新文章

  1. 迁移学习(Transfer learning)、重用预训练图层、预训练模型库
  2. 软件版本号命名规范_电影录音部门和剪辑部门交互规范的参考
  3. 订餐系统之同步饿了么商家订单
  4. LeetCode(109):有序链表转换二叉搜索树
  5. Android简单通讯录从list取数据并显示 eclipse开发
  6. 高德地图文本标注html,设置点标注的文本标签
  7. 新DELL服务器在F2设置界面下raid的配置
  8. [Leetcode] Path Sum II路径和
  9. 【BZOJ4837】LRU算法 [模拟]
  10. 小胖IT大讲堂之一 .NET Reflector工具介绍
  11. fat,uat,pre等环境含义
  12. 学习、使用Echar
  13. 51单片机自学笔记(三)——电子电路基础
  14. python常用模块
  15. 2016.4.6海淀驾校考试科目二
  16. H5多媒体视频播放器的使用及常用属性
  17. android手机变为usb无线网卡,淘汰的手机别扔,简单几步变无线网卡
  18. CS5298 Type-C/DP1.4 到 HDMI 2.1转换芯片|TYPEC转HDMI2.1转换芯片|DP1.4转HDMI2.1转换芯片
  19. 为什么要安全域,哪些区域需要单独划分安全域
  20. 如何将照片从iPhone导入到Mac

热门文章

  1. 机器学习作业班_python神经网络搭建
  2. Python对我下手了!学会这几个知识点可以救命!
  3. 范围分区在数据过期化处理中的应用
  4. 全球著名营销专家怎么评价这本书
  5. 当我们在讨论机器学习时我们在说些什么?
  6. C++:标准程序库-STL迭代器Iterator
  7. Python输入输出详解
  8. python调用C++
  9. 目前为止微型计算机,2017年计算机一级考试题库及答案
  10. c语言开发一个翻译算法,使用有道翻译API做翻译(c语言实现)