[C++]中4种‘类型转换’方式

本文详细介绍了C++中四种类型转换机制:dynamic_cast、reinterpret_cast、static_cast与const_cast的具体用法及注意事项,并对比了不同转换方式的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

  dynamic_cast<new_type>(var)
  reinterpret_cast<new_type>(var)
  static_cast<new_type>(var)
  const_cast<new_type>(var)

 

 

 

1. dynamic_cast:

(1)运行时,检查转换; 

(2)基类中一定要有虚函数(不能用于基础类型),否则编译不通过; 

(3)成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL; (更多请查看,引文《C++中四种类型转换方式》)

2. reinterpret_cast: 

(1) reinterpret的意思是重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。

(2) 有着和C风格的强制转换同样的能力。它可以转化任何内置的数据类型为其他任何的数据类型,也可以转化任何指针类型为其他的类型。

(3) 它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用。

3. static_cast: 

(1)可以实现C++中内置基本数据类型之间的相互转换,enum、struct、 int、char、float等; 

(2)它不能进行无关类型(如非基类和子类)指针之间的转换; 

(3)如果涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换,不一定包含虚函数

4. const_cast: 

(1)去掉const属性:const_case<int*> (&num),常用,因为不能把一个const变量直接赋给一个非const变量,必须要转换。

(2)加上const属性:const int* k = const_case<const int*>(j),一般很少用,因为可以把一个非const变量直接赋给一个const变量,比如:const int* k = j;
 

另外:

double x = 10.3;
int y;
y = int (x);    // functional style cast(构造函数zhuan'h)
y = (int) x;    // c-style cast (C风格强转)
(1) 尽可能不使用c风格的类型强转
(2) 可以使用构造函数(函数式转换)代替

 

参考:

[1] C++四种类型转换机制

[2] C++中四种类型转换方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值