C++四种类型转换

static_cast

C++静态类型转换,c语言隐式类型可以转换的,基本上都可以

//语法:

type a = static_cast<type>(b); //b不为type类型

reinterpret_cast

指针类型不可以这么转化;指针需要强制类型转换

char* p1 = "hello";
int* p2 = NULL;
p2 = reinterpret_cast<int*>(p1);

dynamic_cast

用于继承中多态时候的类型识别,在子类对象传给父类指针后,可以对父类指针使用dynamic_cast进行向下类型转换

Dog *pDog = dynamic_cast<Dog*>(base);
if(pDog != NULL){     转换成功;  }

const_cast去除变量的只读属性(去除const属性)注意:实参是可读可写才行;通过字符数组是在堆中分配内存空间;而char*指向的字符串是字符串常量,不可改变。
void printBuf(const char* p)
{char* p1 = NULL;p1 = const_cast<char*>(p);p1[0] = 'z';          //通过类型转换就可以改变指针指向的内存空间的值
}
  char buf[] = "afdasdf"; //栈 中分配内存printBuf(buf); // okchar *my_p = "fsjljsf"; //字符常量,在 全局数据区 ,本身就不能改变;printBuf(my_p); //error

  • 首先字符串是在静态常量区分配的内存,然后指针my_p在栈里分配的内存,然后将指针指向”abacd”所在的内存块。指针存放的是"fsjljsf"的地址,而这个地址所在内存是在静态常量区中,是不可改变的。
  • char buf[]数组是在栈中,数组栈中分配了内存,是局部变量,也就是说,由于char buf[]是分配了内存的,所以这里只是将"afdasdf"复制到char buf[]在栈中分配的内存中去,是可读可写的。这里就和指针区别出来了,指针是不分配内存的,指针指向的是一块静态常量区中的内存。
异常处理机制:

发生异常后,跨函数,从throw直接到catch
可能有异常:

void divide(int x, int y)
{if(y == 0)throw x;
}//测试案例:
try
{divide(10,0);
}
catch(int e)cout<<"10除以"<< e << endl;
//    throw; //接到异常不处理
}

处理了异常,程序就不终止。catch到异常,但继续抛出去,由程序自己报错处理,或者其他catch处理

1、如有异常通过throw操作创建一个异常对象并抛掷;
2、将可能抛出异常的程序段放在try中。
3、try的保护段没有异常,try后catch不执行,直到try后跟随的随后一个catch后面的语句继续执行下去。
4、catch子句按照try后顺序执行,捕获或继续抛出异常。
5、未找到匹配,函数terminate将被自动调用,其缺省功能即调用abort终止程序;
6、异常处理不了,通过最后一个catch,使用throw语法,向上仍。

重点:
构造函数没有返回类型,无法通过返回值来报告运行状态,所以只能通过一种非函数机制的途径,
即:异常机制,来解决构造函数的出错问题!!!

异常是严格按照类型匹配,不会隐式类型转换

try
{throw 'z';
}
catch(int e)
{cout << "捕获int类型异常" << endl;
}
catch(...)
{cout << "未知异常" << endl;
}

结论:
1、C++异常处理机制使得 异常引发 和 异常处理不必在同一个函数,
底层更注重解决具体问题,而不必过多考虑异常的处理,上层调用者可以
在适当位置设置 对不同类型异常的处理
2、异常时专门针对抽象编程中一系列错误处理的,C++不能借助函数机制,因为栈结构
先进后出,依次访问,但异常处理要跳级处理,跨越函数

栈解旋:(重要)
异常被抛出后,从进入try起,到异常被抛掷前,这期间栈上的
构造的所有对象都会被自动析构,析构顺序与构造相反
这一过程叫,栈解旋

异常变量的生命周期:

从try到异常抛掷前,其中的对象会自动析构。
三种类型: int char* 类对象
char*主要是 常字符串()全局数据区
抛出(无参)构造函数
throw Text(); //要加()
用 元素 来接 catch(Text e) //此时,调用拷贝构造函数,析构时,先析构拷贝出来的e,再执行返回的元素
用 引用 来接 catch(Text &e)//同一个元素
用 指针 来接 catch(Text *e) //接不到异常,因为抛出的是元素,异常机制严格按照类型匹配

异常的层次结构:继承中的异常
类A中包含其他判断len的类,类A的构造函数根据讨论抛掷异常,即包含的那些类的构造函数。
这些类使用同一个基类size,catch时,使用类A的引用产生多态。

转载于:https://www.cnblogs.com/Lunais/p/5852874.html

类型转换_异常处理机制相关推荐

  1. 运算符重载、STL模板库、类型转换、异常处理机制(C++五)

    目录 一.运算符重载 1. 引入运算符重载 2.语法格式 3.运算符重载有两种表现形式 4.运算符重载分类 5.运算符重载的特点: 二.C++中的STL模板库的使用 1.容器类(container) ...

  2. plsql(轻量版)_异常处理机制

    一个优秀的程序都应该能够正确的处理各种出错异常,并尽可能的从错误中恢复,ORACLE提供异常来实现错误处理,异常exception这个词还是这个,处理正常执行过程中未预料的事件,他分为预定义的错误,和 ...

  3. java 异常机制_深入理解Java异常处理机制

    一.引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中 ...

  4. Java异常处理深入理解_关于java异常处理机制的深入理解.doc

    关于java异常处理机制的深入理解.doc 关于JAVA异常处理机制的深入理解1引子TRYCATCHFINALLY恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过 ...

  5. 简述java的异常处理机制_简述java异常处理机制

    引言: Hello,我的好朋友们,又到我们相聚的时间了,今天我要和大家分享一些有关java异常处理的相关 知识,也是通过老师的讲解和相关材料的借鉴之后的一个比较系统的总结,真心希望写完这篇文章的我和看 ...

  6. java提供两种处理异常的机制_浅析Java异常处理机制

    关于异常处理的文章已有相当的篇幅,本文简单总结了Java的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析. 博客另一篇文章<[译]Java异常处理的最佳实践 ...

  7. python异常处理机制的好处_浅谈Python异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...

  8. python提供什么机制处理程序运行错误_浅谈Python异常处理机制

    异常机制己经成为衡量一门编程语言是否成熟的标准之一,使用异常处理机制的 Python 程序有更好的容错性,更加健壮. 对于计算机程序而言,情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦!就算 ...

  9. bash 抓捕异常_五种异常处理机制:try...except与try...finally

    (try finally) Python try except异常处理详解 python标准异常 异常名称描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 Key ...

最新文章

  1. mysql 指定日期条件求和_如何在mysql中按每个日期对字段进行求和-问答-阿里云开发者社区-阿里云...
  2. 示例Express中路由规则及获取请求参数
  3. VS2010与.NET4系列 19.ASP.NET4中新的HTML编码的%: %语法
  4. 关于strcpy的安全函数的选择
  5. java中同步代码块具体步骤,Java同步块
  6. 毕业设计-论文写作笔记【毕设题目类型、论文写作细节、毕设资料】
  7. VBA下载糗事百科图片
  8. 武汉理工大学计算机转专业名单,武汉理工大学转专业的限制
  9. 计算机发展的雏形,( )是现代计算机的雏形。
  10. 三方平台管理公众号----创建第三方平台
  11. R-CNN论文精读(论文翻译)
  12. 虚拟机共享计算机的网络连接,Parallels Desktop如何共享网络 Mac与虚拟机共享网络设置教程...
  13. docker镜像编译与docker-compose部署与编排
  14. RSA创新沙盒盘点|BastionZero——零信任基础设施访问服务
  15. java语音播报天气_语音播报实时天气
  16. Visual Studio 2010 项目属性配置
  17. android.os.Build的一些使用方法
  18. 微信小程序获取数据库的数据返回空数组
  19. ts无损剪辑合并_将你的视频无损封装成MP4,非转码哦!
  20. 【味觉模拟】重口味人士福利“智能咸味勺子”

热门文章

  1. 【全文搜索引擎】Elasticsearch基本查询基础JavaAPI
  2. 基于ASP.Net Core开发的一套通用后台框架
  3. 搭建SpringBoot、Jsp支持学习笔记
  4. [转] hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询
  5. 软件工程师的职业生涯
  6. [转]sqlplus中不能上下键选择前一条命令解决方法
  7. strong与em、q、cite、blockquote区别
  8. java正则表达式入门文档
  9. Web 服务器 之 安装 Apache 2 和 Tomcat 5.5
  10. Python3快速入门(五)——Python3函数