深入C++四种强制类型转换的总结

c++中提供了四种新的强制转换分别是:const_cast、dynamic_cast、reinterpret_cast、static_cast.

这四种转换类型,每一种都适用于特定的目的:
const_cast 一般用于强制取消对象的常量性。它是唯一能够做到这一点的C++风格的强制转型。
dynamic_cast 主要用于执行"安全向下转型",也就是说,要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行强制转型。

reinterpret_cast
是特意用于底层转型,导致实现以来的结果,例如,将一个指针转换为一个整数。这样的强制转换在底层代码外英爱极为罕见。

static_cast
可以用于强制隐型转换,如non-const对象转换为const对象,int转换为double等。它还可以用于很多这样的转换的反向转换,例如:void*指针转型为有类型的指针,基指针转换为派生类指针,但是它不能讲一个const转换为non-const,它最接近C风格的转换。

(0)

相关推荐

  • C++中Operator类型强制转换成员函数解析

    类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型.转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数.它的定义格式如下: 复制代码 代码如下: class <类型说明符1> { public: operator <类型说明符2>(); - } 这个转换函数定义了由<类型说明符1>到<类型说明符2

  • 解析C++中四种强制类型转换的区别详解

    C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型.那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换.C++中风格是static_cast<type>(content).C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干

  • C++中4种强制类型转换的区别总结

    前言 使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast和const_cast. const_cast,字面上理解就是去const属性. static_cast,命名上理解是静态类型转换.如int转换成char. dynamic_cast,命名上理解是动态类型转换.如子类和父类之间的多态类型转换. reinterpreter_cast,仅仅重新解释类型,但没有进行二进制的转换. 一.static_cast 用法:static_cast

  • 基于c++强制类型转换的(总结)详解

    什么是类型转换? 类型转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式.为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符. C与C++的类型转换 C中: 复制代码 代码如下: (T)element 或者 T(element) c++中: 复制代码 代码如下: reinterpret_cast<T*> (expression)dynamic_cast<T*>     (expression)static_cast<T*>      (e

  • 浅谈C++的语句语法与强制数据类型转换

    一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件).每一个程序单位由以下几个部分组成: 预处理命令.如#include命令和#define命令. 声明部分.例如对数据类型和函数的声明,以及对变量的定义. 函数.包括函数首部和函数体,在函数体中可以包含若干声明语句和执行语句. 如下面是一个完整的C++程序: #include <iostream>//预处理命令 using namespace std; //在函数之外的声明部分 int a=3; //在函数之外的声明部分 int ma

  • 关于C++的强制类型转换浅析

    前言 一说起强制类型转换大家都很熟悉,相信很多学习完C++的朋友还在使用C语言的强制类型的方式 (类型)变量. C++其实也具有自己的一套强制类型转换它们分明是:static_cast  reinterpret_cast  const_cast  dynamic_cast四种类型. 那么肯定会有人好奇C++是不是闲,C语言的强制类型用的舒舒服服的,为什么要新推出来这几个? 新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换.C++中风格是static_cast<typ

  • 一文搞懂C++中的四种强制类型转换

    在了解c++的强制类形转换的时候,先看看在c语言中是怎么进行强制类形转换的. C语言中的强制类形转换分为两种 隐式类型转换 显示类型转换 int main() { int a = 97; char ch = a; // 隐式类型转换 int b = (int)ch; // 显示类型转换 cout << "a = " << a << endl; cout << "ch = " << ch << e

  • 深入C++四种强制类型转换的总结

    c++中提供了四种新的强制转换分别是:const_cast.dynamic_cast.reinterpret_cast.static_cast.这四种转换类型,每一种都适用于特定的目的:const_cast 一般用于强制取消对象的常量性.它是唯一能够做到这一点的C++风格的强制转型.dynamic_cast 主要用于执行"安全向下转型",也就是说,要确定一个对象是否是一个继承体系中的一个特定类型.它是唯一不能用旧风格语法执行强制转型.reinterpret_cast 是特意用于底层转型

  • C++中4种强制类型转换的区别详析

    前言 C++即支持C风格的类型转换,又有自己风格的类型转换.C风格的转换格式很简单,但是有不少缺点的: 1.转换太过随意,可以在任意类型之间转换.你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些. 2.C风格的转换没有统一的关键字和标示符.对于大型系统,做代码排查时容易遗漏和忽略. C++风格完美的解决了上面两个问题.1.对类型转换做了细分,提供了四

  • C++强制类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)

    目录 1. c强制转换与c++强制转换 2. static_cast.dynamic_cast.const_cast.reinterpret_cast dynamic_cast const_cast reinterpret_cast 3. c++强制转换注意事项 1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 c++除了能使用c语言的强制类型转

  • C++ 强制类型转换详解

    目录 一.C强制转换 二.C++强制转换 1.static_cast 静态转换(编译时检查) 2.const_cast 常量转换 3.reinterpret_cast 重新解释转换 4.dynamic_cast 动态转换(运行时检查) 三.要点总结 一.C强制转换 C语言中的强制转换主要用于普通数据类型.指针的强制转换,没有类型检查,转换不安全, 语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2(基本已经不用了) 二.C++强制

  • C++强制类型转换的四种方式

    目录 1 C++类型转换本质 1.1 自动类型转换(隐式) 1.2 强制类型转换(显式) 1.3 类型转换的本质 1.4 类型转换的安全性 2 四种类型转换运算符 2.1 C语言的强制类型转换与C++的区别 3 static_cast 4 reinterpret_cast 5 const_cast 6 dynamic_cast 6.1 向上转型(Upcasting) 6.2 向下转型(Downcasting) 1 C++类型转换本质 1.1 自动类型转换(隐式) 利用编译器内置的转换规则,或者用

  • 一起聊聊C++中的四种类型转换符

    目录 一:背景 二:理解四大运算符 1. const_cast 2. reinterpret_cast 3. dynamic_cast 3. static_cast 一:背景 在玩 C 的时候,经常会用 void* 来指向一段内存地址开端,然后再将其强转成尺度更小的 char* 或 int* 来丈量一段内存,参考如下代码: int main() { void* ptr = malloc(sizeof(int) * 10); int* int_ptr = (int*)ptr; char* char

随机推荐