首页
学习
活动
专区
圈层
工具
发布

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

一、重新解释类型转换 reinterpret_cast C++ 静态类型转换 static_cast 可以完成 数据类型 转换 , 如 将 int 转为 double , 将 bool 转为 char...语言的隐式转换 p2 = (int*)p1; // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; }; 执行结果 : 3、指针数据类型转换 - C+...+ 重新解释类型转换 reinterpret_cast ( 转换成功 ) 使用 重新解释类型转换 reinterpret_cast , 将 char* 类型指针 强制 重新解释称 int* 类型的指针...; // 使用 C++ 重新解释类型转换 reinterpret_cast // 将 char* 类型指针 强制 重新解释称 int* 类型的指针 p2 = reinterpret_cast<int...、C 样式强制转换或函数样式强制转换 //p2 = static_cast(p1); // 使用 C++ 重新解释类型转换 reinterpret_cast // 将 char* 类型指针

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

    static_cast ,reinterpret_cast

    C++中static_cast和reinterpret_cast的区别 C++ primer第五章里写了编译器隐式执行任何类型转换都可由static_cast显示完成;reinterpret_cast通常为操作数的位模式提供较低层的重新解释...1、C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作。...2、C++中的reinterpret_cast主要是将数据从一种类型的转换为另一种类型。所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式的重新解释。..."; i = reinterpret_cast(p); 此时结果,i与p的值是完全相同的。...C++同时提供了4种新的强制类型转换形式(通常称为新风格的或C++风格的强制转 型):const_cast(expression)、dynamic_cast(expression)、 reinterpret_cast

    2.3K100

    C++雾中风景11:厘清C++类型转换(static_cast,dynamic_cast,reinterpret_cast,const_cast)

    ,reinterpret_cast,const_cast,今天就来聊一聊,在C++之中应该如何来使用这些类型转换的。...2.新式的类型转换 C++语言提供了四种新式类型转换的操作: static_cast,dynamic_cast,reinterpret_cast,const_cast,这些操作都依托了C++的模板来使用...reinterpret_cast reinterpret_cast主要用于指针类型之间的转换,和对象到指针类型之间的转换。reinterpret就是对数据的比特位重新解释转换为我们需要转换的对象。...p = reinterpret_cast(b); if (p !...3.小结 梳理完C++新引进的四种类型转换符之后,想必大家在实践之中可以很好的运用好这些C++的类型转换。后续笔者还会继续深入的探讨有关C++之中类型系统相关的内容,欢迎大家多多指教。

    78621

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

    1 C++中的类型 C++中类型分为两种:内置类型和自定义类型。内置类型中分为算术类型和空类型。其中算术类型包含字符,整型,布尔值和浮点数。...C++要兼容C语言,所以C++中还可以使用C语言的转化风格: 隐式类型转换(静态转换):static_cast 强制类型转换(重新解释):reinterpret_cast 去常转换:const_cast...) static_cast可以用于有继承关系类对象之间的转换和类指针之间的转换 (派生类转换成基类时安全(上行转换),基类转换成派生类时不安全(下行转换)) 3.2 reinterpret_cast...reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释,用于将一种类型转换为另一种不同的类型 3.3 const_cast 去常转换 const_cast 只能改变运算对象的底层...这个建议对于reinterpret_cast尤其适用,因为此类类型转换总是充满了风险。

    1.5K10

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

    转换前提是在编译时两个数据类型已知 ; // 静态类型转换 整型 -> 浮点型 int num = 10; float fnum = static_cast(num); 重新解释类型 reinterpret_cast...重新解释类型 char* 指针类型 -> int* 指针类型 char* hello = "Hello"; //获取 hello 字符串地址 , 将其转为 int 类型 int hello_address = reinterpret_cast...C 语言中没有该转换类型 ; 常量转换 const_cast : 只针对 C++ 常量 , 将 常量转为变量 或 将 变量转为常量 ; 2、C 语言和 C++ 常量原理本质 C 语言常量 和 C++...; C 语言常量 本质是 内存中的一块空间 , 可以通过 & 获取地址修改 ; C++ 常量 本质是 创建了一个符号表区域 , 使用键值对形式存储常量值 ; 3、C 语言和 C++ 类型转换联系 C+...+ 中的 静态类型转换 static_cast 和 重新解释类型 reinterpret_cast 对应 C 语言中的 强制类型转换 , C++ 中的 动态类型转换 dynamic_cast 和 常量转换

    66910

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

    文章目录 I . const_cast 转换操作符 II . static_cast 转换操作符 III . dynamic_cast 转换操作符 IV . reinterpret_cast 转换操作符...指针变量 转换失败 " << endl; } else { //转换结果不为 null child2->function_viurtual(); } ② 执行结果 : 子类虚函数 IV . reinterpret_cast...转换操作符 ---- reinterpret_cast 转换操作符作用 : 对指针变量 , 引用变量进行原始的转换 , 即将地址值转成对应的类型 ; ① 代码示例 : // 4. reinterpret_cast...对指针变量 , 引用变量进行原始的转换 ; char* hello = "Hello"; //获取 hello 字符串地址 , 将其转为 int 类型 int hello_address = reinterpret_cast...子类 Child 指针变量 转换失败 " << endl; } else { //转换结果不为 null child2->function_viurtual(); } // 4. reinterpret_cast

    93630

    C++的类型转换

    但是不能转换指针类型 2)若不同类型之间,进行强制类型转换,用reinterpret_cast() 进行重新解释 3)一般性结论: C语言中 能隐式类型转换的,在c++中可用 static_cast...因C++编译器在编译检查一般都能通过;C语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast() 进行强行类型 解释。...总结:static_cast()和 reinterpret_cast() 基本上把C语言中的 强制类型转换给覆盖reinterpret_cast()很难保证移植性。...; //4 一般性的结论: c语言中 能隐式类型转换的 在c++中可以用 static_cast()进行类型转换 //C++编译器在编译检查一般都能通过 //c语言中不能隐式类型转换的,在...c++中可以用 reinterpret_cast() 进行强行类型 解释 system("pause"); return ; } dynamic_cast 用法和 reinterpret_cast

    2.1K20

    【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 ; 本篇博客中...========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 4、子类 和 父类 之间的类型转换 - 重新解释类型转换 reinterpret_cast C...C++ 强制类型转换 , 重新解释类型转换 reinterpret_cast pFather = reinterpret_cast(&son); pFather->say();

    1.5K21

    【C++进阶】深入探索类型转换

    C++ 引入四种显式转换运算符(static_cast、dynamic_cast、const_cast、reinterpret_cast),通过语义化分类和编译期检查,将类型转换的风险从「运行时炸弹」转化为...根据C++之父Bjarne Stroustrup的统计,现代C++项目中超过90%的类型转换需求都可以通过新的转换运算符安全实现。...十、参考资料 《C++ Primer(第 5 版)》这本书是 C++ 领域的经典之作,对 C++ 的基础语法和高级特性都有深入讲解。...《Effective C++(第 3 版)》书中包含了很多 C++ 编程的实用建议和最佳实践。...C++ 官方标准文档:C++ 标准文档是最权威的参考资料,可以查阅最新的 C++ 标准(如 C++11、C++14、C++17、C++20 等)文档。

    12910

    C++的类型转换

    C++觉得它不够好,自己在C语言的基础上,重新搞了一下C++自己的四种类型转换。需要注意的是因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。...3.C++强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast..., i, d); 3.2 reinterpret_cast reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释,用于将一种类型转换为另一种不同的类型。...int* p = &i; //C++规范转换 --reinterpret_cast适用于不相关的类型之间的转换 int address = reinterpret_cast(p); printf...②dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0 4.问答 C++中的4中类型转化分别是:①static_cast  ②reinterpret_cast  ③const_cast

    1.3K30

    C++中的类型转换

    C++的类型转换 零、前言 一、C语言的类型转换 二、C++强制类型转换 1、static_cast 2、reinterpret_cast 3、const_cast 4、dynamic_cast 5、...+提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格 二、C++强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast...、reinterpret_cast、const_cast、dynamic_cast 1、static_cast static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用...(int i) { cout<<"DoSomething" <<endl; return 0; } void Test () { // // reinterpret_cast...,所以这样用有时会产生不确定的结果 // FUNC f = reinterpret_cast(DoSomething ); f(); } 3、const_cast

    3K20

    现代C++系统编程中类型重解释的内存安全范式

    然而,一个普遍存在的编码模式——reinterpret_cast(byte_buffer[offset])——揭示了程序员对C++指针语义的深层次误解。...本文通过形式化分析这一反模式,探讨了地址空间操作与值语义的混淆现象,提出了基于现代C++类型系统的安全访问范式,并建立了防御性指针运算的工程实践框架。...2.理论基础2.1内存对象模型(C++17§6.7)C++标准将存储分为字节(byte)和对象(object)两个抽象层次。...//错误:值转换(违反内存安全)returnreinterpret_cast(static_cast(byte_value));}};2.2指针运算的形式语义指针运算在C+...returnreinterpret_cast(target_address);}};6.结论建议6.1核心发现语义鸿沟:buffer[offset]与buffer+offset之间的差异反映了C+

    19910

    C++补充知识&C++11及其特性

    用法: TYPE b = reinterpret_cast (a) TYPE必须是一个指针、引用、算术类型、函数指针. int* p = reinterpret_cast(0x999999...; Dog& dog3 = reinterpret_cast(a2);//引用强转用法 注意:滥用 reinterpret_cast 运算符可能很容易带来风险。...类型转换使用建议 static_cast静态类型转换,编译的时c++编译器会做编译时的类型检查;隐式转换;基本类型转换,父子类之间合理转换 若不同类型之间,进行强制类型转换,用reinterpret_cast...因C++编译器在编译检查一般都能通过;C语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast() 进行强制类型解释**。...总结:static_cast()和reinterpret_cast() 基本上把C语言中的 强制类型转换给覆盖,注意reinterpret_cast()很难保证移植性。

    69310

    【C++从小白到大牛】C++的隐式和显示类型转换基础知识讲解

    为什么C++需要四种类型转换 C风格的转换格式很简单,但是有不少缺点的: 隐式类型转化有些情况下可能会出问题:比如数据精度丢失 显式类型转换将所有情况混合在一起,代码不够清晰 因此C++提出了自己的类型转化风格...,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。...4、C++四大强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast...reinterpret_cast对应的强制类型转换。...对应的也是强制类型转换,那这里与上一个的reinterpret_cast有什么区别呢?

    82710

    【C++】C++的类型转换

    显式类型转换将所有情况混合在一起,代码不够清晰 因此 C++ 提出了自己的类型转化风格,注意 因为 C++ 要兼容 C 语言,所以 C++ 中还可以使用 C 语言的 转化风格 。...C++强制类型转换 标准 C++ 为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast 、 reinterpret_cast 、 const_cast 、 dynamic_cast...reinterpret_cast 操作符通常为操作数的位模式提供较低层次的重新解释,用于将一种类型转换 为另一种不同的类型 int main() { double d = 12.34;...int a = static_cast(d); cout << a << endl; // 这里使用static_cast会报错,应该使用reinterpret_cast //int *...p = static_cast(a); int *p = reinterpret_cast(a); return 0; } const_cast const_cast最常用的用途就是删除变量的

    28810
    领券