c++中四个类型转换符:static_cast,const_cast,dynamic_cast,reinterpret_cast

c++中引入了四个强制类型转换,分别是static_cast、dynamic_cast、const_cast和reinterpret_cast。其使用对比如下:

1.static_cast<type>(expression)

msdn解释:http://msdn.microsoft.com/en-us/library/c36yw7x9(v=vs.80).aspx

一般的基本类型转换都可以使用此表达式,该转换不会进行运行时类型检查。

2.dynamic_cast<type>(expression)

msdn解释:http://msdn.microsoft.com/zh-cn/library/cby9kycs(v=VS.71)

该转换通常用于将基类类型的指针或者引用转换为其派生类类型的指针或引用,在类型转换的时候会进行运行时类型检查。type必须为一个指向已定义的类类型指针或引用,或者是一个为0的指针。

type分别为指针或者引用的时候会有些不同,基本使用可参照c++ primer 647页的内容。

3.const_cast<type>(expression)

msdn解释:http://msdn.microsoft.com/zh-cn/library/vstudio/bz6at95h(v=vs.100).aspx

该转换可以移除expression的const、volatile和_unaligned属性。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
C++,四种类型的转换(有时也称为“cast”)用于处理不同数据类型的互相转换,它们各有特定的用途和使用场景。以下是这四种转换的简要说明以及它们在源代码的基本实现: 1. **static_cast**:这是一种静态类型转换,用于明确且不涉及运行时类型的检查。它可以用于基本类型、指针、引用和内置的enum之间直接的转换。源代码示例: ```cpp int i = 5; double d = static_cast<double>(i); ``` 2. **dynamic_cast**:用于运行时类型检查,主要用于对象之间的类型转换,特别是当基类指针或引用需要转换为派生类类型时。如果类型转换成功,返回指向或引用的对象;否则返回null(对非指针)。例如: ```cpp class Base { ... }; class Derived : public Base { ... }; Base* baseObj = new Derived(); Derived* derivedObj = dynamic_cast<Derived*>(baseObj); ``` 3. **const_cast**:用于修改对象的const属性,即使在常量表达式也可以用于临时去除const限定。这通常用于函数参数传递或返回值,或者为了修改const成员。注意这是有风险的,因为它打破了const契约: ```cpp const int& constRef = getConstInt(); int& mutableInt = const_cast<int&>(constRef); ``` 4. **reinterpret_cast**:这是最强大但也是最危险的转换,它将一个对象的数据重新解释为另一种类型,无视数据原有的字节布局。通常用于底层内存操作,如指针类型间的转换。不建议用于正常类型转换,仅在必要时使用,例如: ```cpp void* rawMemory = ...; // 假设我们知道它是int数组 int* intPtr = reinterpret_cast<int*>(rawMemory); ``` 请注意,这些类型转换在编译时就会进行,因此源代码的实现主要体现在编译器层面,而不是直接在源码文件看到具体的转换操作。实际的转换操作在C++库内部由编译器优化器处理。在代码,我们主要关注的是转换的语法和意图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值