C++中与类型转换相关的关键字

C++中与类型转换相关的关键字有:static_castconst_castdynamic_castreinterpret_cast这四个类型转换符。强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。

在c++中的数据类型转换一般有以下几种情况:

  1. 将一种算术类型的值赋给另一种算术类型的变量时,c++将对值进行转换
  2. 表达式中包含不同的类型时,c++将对值进行转换
  3. 将参数传递给函数时,c++将对值进行转换

 

static_cast

static_cast在C++中就相当于C语言中的强制类型转换语法,用于在编译期对某种类型的变量进行强制类型转换。

int main()
{
	 static_cast<int*>(malloc(0));
	 static_cast<int>(0.);
 }

使用了static_cast分别将void*转换为了int*,以及将double转为了int。

const_cast


const_cast是C++中用于处理与const相关的强制类型转换关键字。其功能为:为一个变量重新设定其const描述。可以为一个变量强行增加或者删除其const限定。

需要明确的是,即使用户通过 constcast 强行去除了 const 属性,也不代表当前变量从不可变变为了可变。constcast 只是使得用户接管了编译器对于 const 限定的管理权,故用户必须遵守 " 不修改变量 " 的承诺。如果违反此承诺,编译器也不会因此而引发编译时错误,但可能引发运行时错误。

dynamic_cast

dynamic_cast 的使用必须同时满足以下所有条件:
被转换的变量的类型为基类指针或引用,且其确实存放了一个继承类指针或引用,基类具有虚表,即基类必须至少定义了一个虚函数。

struct A {virtual void test() {}};//基类含有虚函数
struct B: A {void test2() {}};	  //继承类特有函数
int main()
{
	//静态类型为基类指针的变量存放继承类指针
	A *b = new B;
	
	//通过向下类型转换调用继承类特有函数
	dynamic_cast<B *>(b)->test2();	
}

由于 test2 成员函数并未在基类中注册为虚函数,我们将无法通过静态类型为 A * 的变量 b 调用此函数。但由于我们可以确定变量 b 的动态类型为 B *,则可以于运行时通过 dynamic_cast 将变量 b 的静态类型转为 B *,然后调用继承类的特有函数 test2。

reinterpret_cast


reinterpret即重新解释,作用是提供某个变量在底层数据上的重新解释。当我们对一个变量使用reinterpret_cast之后,编译器将无视任何不合理的行为,强行将被转换变量的内存数据解释为某个新的类型。但其要求转换前后类型所占用内存大小一致,否则将引发编译时错误。

int main()
{
	reinterpret_cast<int *>(0);//强行将一个整数的内存数据解释为一个int *
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值