首页 > 其他分享 >cpp:指针转化(百度AI:static_cast/dynamic_cast/const_cast/reinterpret_cast)

cpp:指针转化(百度AI:static_cast/dynamic_cast/const_cast/reinterpret_cast)

时间:2024-10-19 18:59:02浏览次数:5  
标签:转换 reinterpret -- cast int static const 指针

cpp:指针转化(百度AI:static_cast/dynamic_cast/const_cast/reinterpret_cast)

 

 

 

 

一、 c++ 指针转化概述:	在C++中,指针转换主要包括静态转换、动态转换、常量转换和重新解释转换四种类型。‌


	‌1、	静态转换(static_cast)‌:  

		--	用于基本数据类型之间的转换,如将int转换为char。
		--	用于类层次结构中基类指针到派生类指针的转换,但需要确保转换的安全性。
			
			示例代码:
			
				int i = 48;
				char c = (char)i;


	2、动态转换(dynamic_cast)‌:	

		--	主要用于类层次结构中基类指针到派生类指针的转换,需要确保存在多态关系。
		--	用于确保转换的安全性,通常用于实现接口。
		
			示例代码:

				class Animal { public: virtual void cry() = 0; };
				class Cat : public Animal { public: void cry() { cout << "喵喵喵" << endl; } };
				class Dog : public Animal { public: void cry() { cout << "汪汪汪" << endl; } };
				Dog* dog1 = new Dog();
				Animal* a1 = dynamic_cast<Animal*>(dog1); // 安全转换
			
			
	‌3、常量转换(const_cast)‌:

		--	用于去除变量的常量性,允许修改常量成员。

			示例代码:

				const int ci = 48;
				int i = const_cast<int&>(ci); // 去除常量性,但需谨慎使用


	‌4、重新解释转换(reinterpret_cast)‌:

		--	主要用于指针类型之间的强制转换。
		--	可以将任何类型的指针转换为任何其他类型的指针。
		
			示例代码:

				int* pint = new int(48);
				char* pchar = reinterpret_cast<char*>(pint); // 将int指针转换为char指针


	‌	注意事项和常见问题‌:

			--	在进行指针转换时,需要确保转换的合法性和安全性,避免出现类型不匹配导致的程序错误。
			--	重新解释转换(reinterpret_cast)虽然功能强大,但使用时需要特别小心,因为它可能会导致不可预见的错误。




二、c++ 转化


	1、概述:

		--	在C++中,将一个类型的指针转换为另一个类型的指针可以通过使用static_cast或C风格的转换操作符。
			但是,必须确保转换的安全性,即目标类型必须能够安全地表示原始指针指向的数据。


	2、代码示例:

			int x = 10;
			int* ptr = &x;
			 
			// C风格的转换
			double* dPtr = (double*)ptr;  // 不安全,可能会导致未定义行为
			 
			// static_cast的转换
			double* safeDPtr = static_cast<double*>(reinterpret_cast<void*>(ptr));  // 可以,但通常不推荐
			 
			// 更安全的方式是直接进行static_cast转换,但要确保转换的合理性
			double* betterDPtr = static_cast<double*>(ptr);  // 如果编译器允许,这也可能是不安全的
			
			
		注意事项:
			
			--	在这个例子中,我们尝试将一个整数指针转换为双精度指针。 直接的C风格转换是不安全的,因为它可能导致指针类型不匹配的问题。 
				使用reinterpret_cast可以进行转换,但通常不推荐这样做,因为它可能导致未定义行为。 
				最安全的方式是使用static_cast进行转换,但要确保转换的合理性。

			--	在实际编程中,你应该尽量避免需要指针转换的设计,因为这可能是代码中的潜在bug。 
				如果你需要进行转换,请确保转换的合理性并且不会破坏类型安全。
					

 

 

 

 

参考资料:

  1.  百度AI:  https://www.baidu.com/s?word=c++ 指针转化&rsv_dl=DQA_PC_COPY

 

标签:转换,reinterpret,--,cast,int,static,const,指针
From: https://www.cnblogs.com/lnlidawei/p/18478121

相关文章

  • C++ 基础-面试题01(C和C++区别、C结构体和C++结构体区别、C和C++ static区别、a和&a区
    1.C和C++的区别特性CC++编程范式面向过程编程面向对象编程+面向过程编程+泛型编程类和对象不支持类和对象支持类和对象,封装、继承、多态等特性标准库标准库有限,如stdio.h、stdlib.h丰富的标准库,如STL(容器、算法)函数和运算符重载不支持支持内存管理手动管理,使用malloc......
  • Graphic Raycaster
    参数解释GraphicRaycaster——射线检测IgnoreReversedGraphics是否忽略反方向图形,勾选此选项时反转180°的图形将不接受射线检测,否则正反面都接受BlockingObjects屏蔽指定对象类型,None都不屏蔽TwoD屏蔽具有2D碰撞体的2D物理对象,ThreeD屏蔽具有3D碰撞体的3D物......
  • Mybatis-plus 3.5.4 的AOP问题 java.lang.ClassCastException: class org.springfram
    报错,然后我把mapper上的@repository删掉就好了,为什么ChatGPT说:ChatGPT删除@Repository注解后问题解决,可能是与SpringAOP代理机制和MyBatisPlus结合时的一些细节有关。以下是原因分析:@Repository和SpringAOP代理的影响@Repository注解的主要作用是将类标记为持......
  • const关键字
    在C++中,const关键字用于声明常量、保护变量不被修改、限制函数行为等。它是用于提升代码安全性和可维护性的一个重要特性。以下是const关键字在不同场景中的使用方式及其作用:1. 定义常量const关键字可以用来定义不可修改的常量。在这种情况下,常量的值在初始化时被设置,并且不能......
  • springboot~ConstraintValidatorContext验证两个字段内容相同
    场景我在开发修改密码功能,通过原密码和新密码及确认新密码,希望通过ConstraintValidator这个方式来校验新密码和确认新密码,规则是这两个密码需要是相同的。参考文档https://github.com/micronaut-projects/micronaut-core/issues/3243https://stackoverflow.com/questions/377......
  • Android中的ConstrainLayout的用法(上)
    Android中的ConstraintLayout(约束布局)是一种灵活的布局方式,它允许开发者通过定义视图之间的相对位置来创建复杂的用户界面。以下是对ConstraintLayout的详细解释:一、基本介绍ConstraintLayout是在2016年GoogleI/O大会上发布的布局方式,旨在解决复杂的页面层级嵌套过多的问题......
  • DRÆM – A discriminatively trained reconstruction embedding for surface anomaly
    异常检测目的:检测与正常外观显著偏离的局部图像区域。近期异常检测方法缺点:1.缺点1:重建异常区域失败近期的异常检测方法通过生成模型来重建图像,在正常区域里成功,但异常区域里重建失败缺点2:阻碍优化特征提取因为这些方法只在无异常的图像上训练,且通过人工的方式定位......
  • GS-LRM: Large Reconstruction Modelfor 3D Gaussian Splatting 论文解读
    目录一、概述二、相关工作1、多视图的三维重建2、前馈重建三、LRM1、编码器2、解码器3、NeRF渲染四、GS-LRM 1、输入处理2、Transformer3、损失函数五、实验六、局限一、概述    该论文提出了一种利用稀疏输入图像高效预测3D高斯原语的方法,也是第一......
  • C++ 中 `const` 的用法
    C++中const的用法1.在成员函数中的const示例:voidprintWindow()const{//...}含义和特性:函数不会修改对象状态:声明为const的成员函数承诺不会修改该类的任何非const成员变量。可以被常量对象调用:const成员函数可以被常量对象调用,确......
  • const与一级指针
    const与一级指针在C/C++中,const关键字用于表示一个变量的值是不可改变的。通常,它修饰离它最近的类型,意思是它所修饰的部分不能被修改。根据它在声明中的位置,const可以修饰指针或者指针所指向的值。1.const修饰变量如果const修饰变量,则该变量是常量,不能被修改。con......