C++风格的类型转换

类型转换操作符

C++通过引进四个新的类型转换操作符克服了 C 风格类型转换的缺点,这四个操作符是:

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpret_cast
#include<iostream>
#include<string>
using namespace std;
int main()
{
	int a=5;
	//c风格类型转换
	double result = (double)(a)/2.0;
	cout<<result<<endl;
	
	//C++风格的类型转换
	double result2 = static_cast<double>(a)/2.0;
	cout<<result2<<endl;
	return 0;
}

在这里插入图片描述

使用C++风格的类型转换避免了很多不必要的麻烦。
  • 如不能用 static_cast 象用 C 风格的类型转换一样把 struct 转换成 int 类型或者把 double 类型转换成指针类型,另外,static_cast 不能从表达式中去除 const 属性(改用const_cast)
dynamic_cast
  • 它被用于安全地沿着类的继承关系向下进行类型转换
  • dynamic_cast 把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)
reinterpret_cast
  • 操作符的类型转换,其 的 转 换 结 果 几 乎 都 是 执 行 期 定 义
  • 主要用在函数指针类型之间进行转换
typedef void (*FuncPtr)(); // FuncPtr is 一个指向函数 
 // 的指针,该函数没有参数 
 // 返回值类型为 void 
FuncPtr funcPtrArray[10]; // funcPtrArray 是一个能容纳 
 // 10 个 FuncPtrs 指针的数组


int doSomething();//假设有一个叫doSomething的函数需要放进funcPtrArray数组


funcPtrArray[0] = &doSomething; // 错误!类型不匹配 

//reinterpret_cast 可以让你迫使编译器以你的方法去看待它们: 
funcPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething);// this compiles 

此方法的代码是不可移植的,C++不保证所有的函数指针都被用一样的方法表
示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值