目录
前言:
C++为了规范强制类型转换的可观性与安全性,引入了4种强制类型转换符,他们分别是:static_cast、reinterpret_cast、const_cast、dynamic_cast。
1、C++新增转换符的原因
因为c语言的类型转换存在一些缺点,虽然c语言的转换风格简单易懂,但是有些场景下会导致数据精度的丢失不易被发现,即隐式类型转换的代码可读性不强, 而显示类型转换(强制转换)可以让多种类型之间相互转换,不够规范。
2、类型转换的概念
由于C++兼容c语言,因此C++对类型转换的概念是沿用c语言的概念,只不过在其基础上做了优化,当两个对象之间发生了赋值或拷贝,而这两个对象的类型又不一样,就会发生类型转换,并且转换的类型是以被执行对象的类型为基准进行转换,比如赋值运算符的左右两侧类型不相同,或者函数的实参传给形参的类型不相同,又或者函数返回值与接收值类型不相同,这些场景下都会发生类型转换。
c语言对类型转换有两种定义:
1、隐式类型转换、即两个转换对象的类型不一样,让编译器完成他们之间转换,若他们之间不能转换则会报错。
2、显示类型转换、又称强制类型转换,由程序员手动干预转换过程,通常在执行对象的前面加小括号,小括号里写转换之后的类型。
类型转换测试代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main()
{
int i = 12;
// 隐式类型转换
double d = i;
printf("%d, %f\n", i, d);
int* p = &i;
// 显示的强制类型转换
int address = (int)p;
printf("%x, %d\n", p, address);
return 0;
}
运行结果:

转换过程细节图:

最低0.47元/天 解锁文章
920

被折叠的 条评论
为什么被折叠?



