C++——类型转换

C++——类型转换

C语言的类型转换

在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化。其中C语言中总共有两种形式的类型转换,隐式类型转换和显式类型转化。

  • 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败。

  • 显式类型转化:需要用户自己处理。

void test1()
{
   
	int a = 10;
	double b = a;//隐式类型转换
	cout << "int a= " << a << " double b= " << b << endl;

	int* p = &a;
	int c = (int)p;//显示的强制类型转换

	cout << "p= " << p << " int c= " << c << endl;
}

int main()
{
   
	test1();
	return 0;
}

image-20230909213858374

  • 只有相近类型之间才能发生隐式类型转换,比如int 和double类型,它们只是表示的范围和精度不同。而地址类型表示的是地址编号,因此整型和地址类型之间不能发生隐式类型转换,需要通过显式类型转换。

为什么C++需要四种类型转换

C风格的转换格式很简单,但是有不少缺点的:

  1. . 隐式类型转化有些情况下可能会出问题:比如数据精度丢失。
  2. 显式类型转换将所有情况混合在一起,代码不够清晰。

因此C++提出了自己的类型转化风格,且为了提高可视性,引入了四种命名的强制类型转换操作符,分别是static_cast、reinterpret_cast、const_cast、dynamic_cast。注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。

C++强制类型转换

static_cast

static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用 static_cast,即它可以用于任何隐式类型转换,但它不能用于两个不相关的类型进行转换

void test1()
{
   
	double a = 3.141592
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值