首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

static_cast ,reinterpret_cast

C++中static_cast和reinterpret_cast区别 C++ primer第五章里写了编译器隐式执行任何类型转换都可由static_cast显示完成;reinterpret_cast通常为操作数位模式提供较低层重新解释...2、C++中reinterpret_cast主要是将数据从一种类型转换为另一种类型。所谓“通常为操作数位模式提供较低层重新解释”也就是说将数据以二进制存在形式重新解释。..."; i = reinterpret_cast(p); 此时结果,i与p值是完全相同。...reinterpret_cast作用是说将指针p值以二进制(位模式)方式被解释为整型,并赋给i,//i 也是指针,整型指针;一个明显现象是在转换前后没有数位损失。...C++同时提供了4种新强制类型转换形式(通常称为新风格或C++风格强制转 型):const_cast(expression)、dynamic_cast(expression)、 reinterpret_cast

1.9K100

static_cast, dynamic_cast, reinterpret_cast, const_cast区别

从提示信息里可以看到,编译器说如果需要这种强制转换,要使用reinterpret_cast(稍候会说)或者C风格两种转换。...更厉害是,reinterpret_cast可以把整型数转换成地址(指针),这种转换在系统底层操作,有极强平台依赖性,移植性不好。...,且在下行转换时要求基类是多态,如果发现下行转换不安全,dynamic_cast返回一个null指针,dynamic_cast总是认为void*之间转换是安全reinterpret_cast可以对无关类指针进行转换...至于reinterpret_cast,我很喜欢,很象c语言那样暴力转换:)    dynamic_cast:动态类型转换    static_cast:静态类型转换    reinterpret_cast... //int i = reinterpret_cast(f); //成功编译, 但是 *pn 实际上是无意义内存,和 *pn2一样 int* pi = reinterpret_cast

71320
您找到你想要的搜索结果了吗?
是的
没有找到

标准C++类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

进行上行转换(把子类指针或引用转换成基类表示)是安全;   进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全。...②用于基本数据类型之间转换,如把int转换成char,把int转换成enum。这种转换安全性也要开发人员来保证。 ③把空指针转换成目标类型空指针。 ④把任何类型表达式转换成void类型。...,pd1和pd2是一样,并且对这两个指针执行D类型任何操作都是安全; 但是,如果pb指向是一个B类型对象,那么pd1将是一个指向该对象指针,对它进行D类型操作将是不安全(如访问m_szName...这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类虚函数表( 关于虚函数表概念,详细可见)中,只有定义了虚函数类才有虚函数表, 没有定义虚函数类是没有虚函数表。...将在编译时出错;而使用 dynamic_cast转换则是允许,结果是空指针。

1.1K20

【C++】类型转换 ③ ( 重新解释类型转换 reinterpret_cast | 指针类型数据转换 )

;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换 1>已完成生成项目“HelloWorld.vcxproj”操作 - 失败。...报错 // 报错 : error C2440: “=”: 无法从“char *”转换为“int *” // message : 与指向类型无关; // 强制转换要求 reinterpret_cast...;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换 1>已完成生成项目“HelloWorld.vcxproj”操作 - 失败。...( 转换成功 ) 使用 重新解释类型转换 reinterpret_cast , 将 char* 类型指针 强制 重新解释称 int* 类型指针 ; // 使用 C++ 重新解释类型转换 reinterpret_cast...// 将 char* 类型指针 强制 重新解释称 int* 类型指针 p2 = reinterpret_cast(p1); cout 输出数据时 , 会按照变量类型 对变量进行输出

32810

static_cast, dynamic_cast, const_cast 和 reinterpret_cast 怎么用

>(pA); // 去掉 const 属性 *pX = 10 // 是否会真正地修改结果未知,因为对于 a 来说,编译器一般在编译时候会把它放进常量表中 reinterpret_cast 是重新解释意思...,顾名思义,reinterpret_cast 这种转换仅仅是对二进制位重新解释,不会借助已有的转换规则对数据进行调整,非常简单粗暴,所以风险很高。...reinterpret_cast 可以认为是 static_cast 一种补充,一些 static_cast 不能完成转换,就可以用 reinterpret_cast 来完成。..."; float *p1 = reinterpret_cast(str); // 将 int 转换为 int* int *p = reinterpret_cast(100)...; // 将 A* 转换为 int* p = reinterpret_cast(new A(25, 96)); (type)value和type(value) 其实是一个意思,只是写法风格差异而已

1.5K10

C++类型转换

但是不能转换指针类型 2)若不同类型之间,进行强制类型转换,用reinterpret_cast() 进行重新解释 3)一般性结论: C语言中 能隐式类型转换,在c++中可用 static_cast...因C++编译器在编译检查一般都能通过;C语言中不能隐式类型转换,在c++中可以用 reinterpret_cast() 进行强行类型 解释。...总结:static_cast()和 reinterpret_cast() 基本上把C语言中 强制类型转换给覆盖reinterpret_cast()很难保证移植性。...4)dynamic_cast(),动态类型转换,安全基类和子类之间转换;运行时类型检查 5)const_cast(),去除变量只读属性 static_cast 用法和 reinterpret_cast...*book= static_cast (base); //3 reinterpret_cast //可以强制类型转换 Book *book2= reinterpret_cast

1.5K20

【C++】类型转换 ① ( C 中类型转换 | C++ 类型转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast )

一、C 语言中类型转换 1、C 语言类型转换简介 C 语言中 , 类型转换 是常用操作 , 借助该机制 , 将不同数据 数据类型 进行转换 ; C 语言类型转换种类 : 主要是 静态类型转换 (...转换前提是在编译时两个数据类型已知 ; // 静态类型转换 整型 -> 浮点型 int num = 10; float fnum = static_cast(num); 重新解释类型 reinterpret_cast...hello 字符串地址 , 将其转为 int 类型 int hello_address = reinterpret_cast (&hello); 动态类型转换 dynamic_cast :...; 3、C 语言和 C++ 类型转换联系 C++ 中 静态类型转换 static_cast 和 重新解释类型 reinterpret_cast 对应 C 语言中 强制类型转换 , C++ 中 动态类型转换...dynamic_cast 和 常量转换 const_cast 是 C++ 独有的 , 因为 C 语言中没有 子类父类 继承概念 , C++ 中常量本质 与 C 语言也是不同 ;

16910

【C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 )

文章目录 I . const_cast 转换操作符 II . static_cast 转换操作符 III . dynamic_cast 转换操作符 IV . reinterpret_cast 转换操作符...转换操作符 ---- reinterpret_cast 转换操作符作用 : 对指针变量 , 引用变量进行原始转换 , 即将地址值转成对应类型 ; ① 代码示例 : // 4. reinterpret_cast...hello_address = reinterpret_cast (&hello); //打印 hello 地址 , 并以 16 进制形式打印出来 cout << hex << &hello...子类 Child 指针变量 转换失败 " << endl; } else { //转换结果不为 null child2->function_viurtual(); } // 4. reinterpret_cast...hello_address = reinterpret_cast (&hello); //打印 hello 地址 , 并以 16 进制形式打印出来 cout << hex << &hello

29430

【C++】类型转换 ④ ( 子类 和 父类 之间类型转换 - 动态类型转换 dynamic_cast )

在之前写过一篇 C++ 类型转换博客 【C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast...dynamic_cast | reinterpret_cast ) 将 C 语言 和 C++ 中类型转换进行了对比 ; 在 博客 【C++】类型转换 ② ( C++ 静态类型转换 static_cast...| 指针类型数据转换 ) 分析了 指针数据类型转换 , 在 C 语言环境下 , 可以使用显示强制类型转换 , 在 C++ 环境中只能使用 重新解释类型转换 reinterpret_cast ; 本篇博客中...;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换 1>已完成生成项目“HelloWorld.vcxproj”操作 - 失败。...;强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换 1>已完成生成项目“HelloWorld.vcxproj”操作 - 失败。

28610

C++中显式类型转化

(重解释转换)   语法:A = reinterpret_cast(B)   这是一种最不安全转换,最有可能出现问题,reinterpret_cast把对象假想为模式,仿佛它是一个完全不同类型对象...,这是低级位操作,修改了操作数类型,但仅仅重新解释了对象比特模型而没有进行二进制转换,在使用reinterpret_cast做任何事情之前,实际上总是需要它回到原来类型。   ...reinterpret_cast本质(http://blog.csdn.net/coding_hello/archive/2008/03/24/2211466.aspx)一文做试验很好解释了reinterpret_cast...print(&x); 23 }   reinterpret_cast思想就是当需要使用时候,得到东西已经转换成不同类型了,以至于它不能用于类型原来目的,除非再次把它转换回来。...,string*等各种指针,只要有别的方式确定某个void*当初类型是T*,标准保证reinterpret_cast(v[i])可以得到当初值。

1.7K70
领券