首页
学习
活动
专区
工具
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

2K100

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

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

    【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 输出数据时 , 会按照变量类型 对变量进行输出

    51810

    标准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

    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.7K10

    【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 语言也是不同 ;

    21710

    【C++】一文掌握C++四种类型转换 --- static_cast、reinterpret_cast、const_cast、dynamic_cast

    C++要兼容C语言,所以C++中还可以使用C语言转化风格: 隐式类型转换(静态转换):static_cast 强制类型转换(重新解释):reinterpret_cast 去常转换:const_cast...这保证了不能乱用 对于需要强制类型转换场景需要使用reinterpret_cast 总结: static_cast 可以用于基本类型转换 static_cast 不能用于基本类型指针间转换(需要强制类型转换...) static_cast可以用于有继承关系类对象之间转换和类指针之间转换 (派生类转换成基类时安全(上行转换),基类转换成派生类时不安全(下行转换)) 3.2 reinterpret_cast...reinterpret_cast操作符通常为操作数位模式提供较低层次重新解释,用于将一种类型转换为另一种不同类型 3.3 const_cast 去常转换 const_cast 只能改变运算对象底层...这个建议对于reinterpret_cast尤其适用,因为此类类型转换总是充满了风险。

    17910

    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.6K20

    【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”操作 - 失败。

    49910

    【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

    44930
    领券