C++超详细讲解强制类型转换

Willow ·
更新时间:2024-11-01
· 1979 次阅读

目录

1 C 强制类型转换

2 C++ 强制类型转转

1 C 强制类型转换

C 方式的强制类型转换的用法如下代码所示:

(Type)(Expression)

Type:需要转换成的类型

Expression:对其进行转换

e.g.

int v = 0x12345; // 将 int 类型的变量转换成 char 类型 char c = char(v);

C 方式的强制类型转换存在如下问题:

过于粗暴:任意类型之间都可以进行转换,编译器很难判断其正确性

typedef void(PF)(int); int v = 0x12345; // 将 0x12345 转换成一个函数指针的入口地址 PF* pf = (PF*)v;

上述代码编译器是可以编译通过的,但实际上是不可行的,因此编译器无法判断其正确性

潜在的问题不易被发现

难于定位:无法快速定位出现错误的强制类型转换语句

2 C++ 强制类型转转

C++ 方式的强制类型转换以 C++ 关键字的方式进行转换,同时将所有转换类型分为4中类型,如下表所示:

类型特点
static_cast用于基本类型之间的转换
不能同于基本类型指针间的转换
可以用于有继承关系的类对象之间的转换和类指针之间的转换
const_cast用于去除变量的只读属性
强制类型转换的目标类型必须是指针或引用
dynamic_cast用于有继承关系的类指针间的转换
用于有交叉关系的类指针间的转换
具有类型检查的功能
需要有虚函数的支持
reinterpret_cast用于指针类型之间的转换
用于整数和指针类型之间的转换

C++ 方式的强制类型转换具有如下特点:

编译器能够帮助检查潜在的问题

可以快速的在代码中进行定位

支持动态类型识别

e.g. static_cast

void static_cast_Demo() { int i = 0x12345; char c = 'c'; int* pi = &i; char* pc = &c; c = static_cast<char>(i);// ok,可以用于基本类型之间的转换 pc = static_cast<char*>(pi);// error,不能同于基本类型指针间的转换 }

e.g. const_cast

void const_cast_Demo() { const int& i = 1; int& j = const_cast<int&>(i);// ok const int x = 2; int& y = const_cast<int&>(x);// ok int z = const_cast<int>(x);// error,强制类型转换的目标类型必须是指针或引用 j = 5; printf("j = %d\n", j); printf("i = %d\n", i); y = 8; printf("x = %d\n", x); printf("y = %d\n", y); }

到此这篇关于C++超详细讲解强制类型转换的文章就介绍到这了,更多相关C++强制类型转换内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



c+ 强制类型转换 类型转换 C++

需要 登录 后方可回复, 如果你还没有账号请 注册新账号