首页 > 编程语言 >C++强制类型转换

C++强制类型转换

时间:2022-08-23 13:12:05浏览次数:140  
标签:类型转换 转换成 转换 C++ cast 类型 const 强制 指针

强制类型转换

旧风格的强制转型

  • (typename) value 来自C语言。
  • typename(value) 纯粹的C++格式

使用C++的类型转换符

static_cast

  • static_cast < 新类型 > ( 表达式 )
  • 适用场景:低风险转换
    • 基本数据类型之间的转换,如把int转换成char。明确隐式转换。
    • 用于类层次结构中基类和子类之间指针或引用的向上转换。向上转可以,向下转不可以。由于没有动态类型检查,向下转换所以是不安全的。
    • 空指针与其他指针的转换。把void指针转换成目标类型的指针(不安全)。把任何类型的表达式转换成void类型。

dynamic_cast

  • dynamic_cast < 新类型 > ( 表达式 )
  • 会增加额外开销,非必要不使用。
  • 运行期检测是否能安全转换,不能则返回空。能够检测出被检测指针的类型。
    • 通过查询RTTI信息
  • 适用场景,基类(基类必须含有虚函数)与派生类指针与引用之间的向下转换。
    • 基类指针或引用转换成派生类指针或引用。向下转换

const_cast

  • const_cast < 新类型 > ( 表达式 )
  • 用于去除const、volatile属性
    • const 该值不可修改
    • volatile 每次读取该变量的值都重新从内存中读取(不能重复使用放在cache中的备份),且不对该变量进行优化。
  • 新类型只能是指针、引用、this指针
    • 如常成员函数里面的this指针,去除第一个const后,就能修改对象内容了。

reinterpret_cast

  • reinterpret_cast < 新类型 > ( 表达式 )
  • reinterpret_cast是进行高风险转换,比如整型转换成指针,但不能将函数指针转换成数据指针。
  • 显示强转,后果自负。

标签:类型转换,转换成,转换,C++,cast,类型,const,强制,指针
From: https://www.cnblogs.com/oniisan/p/x_cast.html

相关文章

  • [题解]轮流拿牌问题_一道博弈论笔试题(C++)
    题目A和B轮流从一个数组左右两端取数,A先B后,每次取一个数,最终取数总和大者获胜,两人每次都会选择最有利的策略,求获胜者取数的和。思路笔试时遇到的一道算法题,也是博弈论中......
  • c++和python混合编程,调用了CTP的附加库 (windows)(应该是全网第一篇)
    这是一个连接券商的代码,simnow提供的包,windows版,linux的话,下一篇文章介绍听起来就很复杂,所以需要大家有点功底,不懂的东西,多多百度,因为很多细节,我不可能还教怎么使用visual......
  • C++ 黑客攻击系统
    #include<iostream>#include<Windows.h>#include<string>#include<conio.h>//getch使用#include"hacker.h"usingnamespacestd;#defineWIDTH40#define......
  • C++ 黑客攻击系统实现
    #include<iostream>#include<Windows.h>#include<string>#include<conio.h>//getch使用#include"hacker.h"usingnamespacestd;#defineWIDTH40#define......
  • C++ 函数的定义
     函数的定义: 1.确定函数的功能; 2.确定函数的参数; 3.确定函数的返回值; 4.确定函数名; 5.函数的实现。 #include<iostream>usingnamespacestd;intsum(intn)......
  • C++Beginner(3)-Compile
    compilingsourcecodefile(.cpp,.cxx,.cc,.C,.c++)->objectfiles(.o,.obj)->linkobjectfilestogetherintoanexecutable(app.exe,app),staticlibrary(.lib......
  • c++ 智能指针
    智能指针,是模板类,意在避免在使用动态内存时,出现异常等意外,或忘记使用delete,而造成内存泄漏。这个智能指针,在指针变量结束声明周期后,调用对象的析构函数,并自动去释放这个指......
  • 【C++-笔记】访问说明符public、protected和private的用途和区别
    在C++当中,访问说明符主要在如下两个场景中使用:成员访问说明符当我们在定义/声明一个类时,需要使用成员访问说明符来说明成员的访问权限,public、protected和private的区别......
  • 从C过渡到C++——换一个视角深入数组[真的存在高效吗?](2)
    从C过渡到C++——换一个视角深入数组[真的存在高效吗?](2)C风格高效的数组遍历在过渡到C++之前我还是想谈一谈如何书写高效的C的代码,这里的高效指的是C代码的高效,也就是在不......
  • rk3566 linux编译运行librga C++程序
    本文使用的是linuxaarch64版librga.so(1.3.2),来自https://github.com/airockchip/librga 运行环境:rk3566linux系统编译环境:ubuntu20.04gcc/g++9.4工具链:gcc-buildroot......