c++11中四种类型转换

2023-11-17

1、  static_cast:

功能:完成编译器认可的隐式类型转换。

格式type1 a;

type2 b = staic_cast<type1>(a);将type1的类型转化为type2的类型;

使用范围:

(1)基本数据类型之间的转换,如int->double;

int a = 6;

double b = static_cast<int>(a);

(2)派生体系中向上转型:将派生类指针或引用转化为基类指针或引用(向上转型);

class base{       ….     }

class derived : public base{      ….     }

base *b;

derived *d = new derived();

b = static_cast<base *>(d);


2、  dynamic_cast

功能:执行派生类指针或引用与基类指针或引用之间的转换。

格式:

(1)      其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行运行时类型检查;

(2)      基类中要有虚函数,因为运行时类型检查的类型信息在虚函数表中,有虚函数才会有虚函数表;

(3)      可以实现向上转型和向下转型,前提是必须使用public或protected继承;

例子:

向上转型:

class base{       …      };

class derived : public base{      …      };

int main()

{

base *pb;

derived *pd = new derived();

pb = dynamic_cast<base *>(pd);

return 0;

}

向下转型:

class base{       virtualvoid func(){}           };

class derived : public base{      void func(){}      };

int main()

{

base *pb = new base();

derived *pd = dynamic_cast<derived *>(pb);//向下转型

return 0;

}

 

3、const_cast:

只能对指针或者引用去除或者添加const属性,对于变量直接类型不能使用const_cast;不能用于不同类型之间的转换,只能改变同种类型的const属性。

如:

const int a= 0;

int b = const_cast<int>(a);//不对的

const int *pi = &a;

int * pii = const_cast<int *>pi;//去除指针中的常量性,也可以添加指针的常量性;

const_cast的用法:

(1)常用于函数的形参是一个非const的引用,我想要穿进去一个const的引用,可以使用const_cast<Type&>para;去除实参的常量性,以便函数能够接受这个参数。

(2)一个const对象,我们想要调用该对象中的非const函数,可以使用const_cast去除对象的常量性;


4、reinterpret_cast:

从字面意思理解是一个“重新解释的类型转换”。也就是说对任意两个类型之间的变量我们都可以个使用reinterpret_cast在他们之间相互转换,无视类型信息。

不常使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++11中四种类型转换 的相关文章

随机推荐

  • 线程管理之Thread类相关方法简介

    CurrentThread 静态方法 currentThread 方法可返回代码段正在被那个线程调用的信息 简单案列 打印main 方法 正在被那个线程调用 package com zzg thread import com zzg obj
  • [工具使用]黑暗引擎FOFA

    黑暗引擎FOFA FOFA 点我进入 逻辑运算符 搜索子域名domain 搜索指定内容的host全部域名 body cert 搜索选定应用的网站 搜索指定开放端口的IP 搜索指定协议的IP 搜索IP或者网段的信息 搜索指定CSS JS网站
  • 物联网毕设选题 机器视觉口罩佩戴检测系统 - 单片机 stm32 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • VSCode插件开发

    VSCode插件开发 文章目录 VSCode插件开发 创建项目 Extension ts Package json Contribution Points Activation Events 创建项目 npm g i yo generato
  • 【Linux旅行记】进度条小程序

    文章目录 一 预备知识 1 1回车换行 1 2缓冲区 二 倒计时 三 进度条 3 1普通版本源代码 3 2高级版本源代码 小结 博客主页 小智 x0 0x 欢迎关注 点赞 收藏 留言 系列专栏 Linux入门到精通 代码仓库 小智的代码仓库
  • word中目录右边页码对不齐解决方法

    这个目录对不齐原因未知 解决方法 1 在视图中打开标尺 2 选择对不齐的目录项 如果整个目录都有出现不对齐 选择整个目录 3 拖动标尺 进行对齐 4 被治愈了
  • GDB调试的基本使用、GDB调试多进程

    1 编译时加选项 g 生成具有调试信息的程序 gcc g test c o test 2 启动GDB 1 启动GDB gdb test 2 设置运行时参数 主函数中可接收运行时参数 set args 设置运行时参数 如set args 10
  • i.mx287学习笔记9-编译mplayer源码

    上面是我的微信和QQ群 欢迎新朋友的加入 1 下载资源 mplayer http www mplayerhq hu MPlayer releases 这个我编译没用到 但是我看很多帖子都要这个东西 不管他 也找个资源过来 编码库 http
  • C/C++打开目录、读取目录、获取目录下文件状态

    1 程序示例 lstat 或者 stat 需要包含的头文件 include
  • Composite:组合模式

    将对象组合成树形结构以表示 部分 整体 的层次结构 组合模式使得用户对单个对象和组合对象的使用具有一致性 处理树中的每个节点时 其实不用考虑他是叶子节点还是根节点 即模糊了简单元素和复杂元素的概念 客户端可以像处理简单元素一样来处理复杂元素
  • BP神经网络识别手写数字项目解析及代码

    这两天在学习人工神经网络 用传统神经网络结构做了一个识别手写数字的小项目作为练手 点滴收获与思考 想跟大家分享一下 欢迎指教 共同进步 平常说的BP神经网络指传统的人工神经网络 相比于卷积神经网络 CNN 来说要简单些 人工神经网络具有复杂
  • 结构体中的函数指针

    C语言中的类 大家知道C 是面向对象的语言 有很多优良特性 而在C语言中 我们也可以用结构体类似的实现面向对象 成员函数 既然说了用结构体类似的实现某种类 结构体中的变量就可以看做类的变量 实现类的成员函数就要用到函数指针了 一般的函数指针
  • Siebel EAI- Web Service 常见错误汇总

    由于项目原因部分代码被模糊处理 有些问题待补充 欢迎指出错误 很多试探着理解的 研究的不够深入 问题1 Error invoking service XXX Service method XXXXX at step Invoke WebSe
  • C# 文件与Base64的相互转换

    一 转换工具 1 在线图片转Base64编码 2 BeJson在线JSON校验格式化工具 3 Base64在线加密 解密 二 Base64转文件代码 这个案例是 将已经获取到的Base64字符串 转换成文件 保存到服务器的某个文件路径下面
  • linux下rdkafka编译,Linux下librdkafka编译安装使用学习

    Kafka分为服务端和客户端 服务端集群一般称为brokers 客户端分为生产者 producer 和消费者 consumer 开发者通常用客户端从kafka生产消息或消费消息 不同的语言使用不同的客户端 具体信息参见这个页面 https
  • nginx配置非80端口

    user nobody worker processes 2 events worker connections 1024 http include mime types default type application octet str
  • leetcode刷题python之有效的括号

    class Solution def isValid self s str gt bool dict stack for i in s if i in dict top stack pop if stack else if dict i t
  • 微信小程序:消息提示框(wx.showToast)和 交互提示框(wx.showModal)

    摘要 有时需要提示框来提醒我们相应信息 以及交互提示框来让我们是否继续进行操作 一 消息提示框 1 参数介绍 消息提示框只有提示作用 不能交互 函数是wx showToast 下面列出几个主要且常用参数 2 代码 wx showToast
  • 如何把IE浏览器快速变成灰色来哀悼在汶川地震中遇难的同胞们!

    如何把IE浏览器快速变成灰色来哀悼在汶川地震中遇难的同胞们 把IE浏览器快速变成灰色只要作以下二点即可 第一点 在html页面中 在body中加入下面语句 第二点 在css控制表中 加入下面语句 html filter progid DXI
  • c++11中四种类型转换

    1 static cast 功能 完成编译器认可的隐式类型转换 格式type1 a type2 b staic cast