1、C语言的隐式转换和显式转换
double a=1.234;
int b=(int)a;
//强制转换
2、C++的类型转换运算符
1)static_cast(expr):
用于以下三种情况:
相关类型转换,例如整型、实型
子类转父类
void *与其他类型转换
//static_cast(expr)
//相关类型转换
double b=1.23;
int a=static_cast(b);
char c=static_cast(b);
//void *与其他类型转换(单向)
int *pa=&a;
void *p=pa;
//void*是万能指针,可以接受任何指针的类型 ,编译器不会报错
int *p2=p;
//这句是错误的,不能把void*类型的指针转为int*型指针
int *p2=(int)p;
//这样才是对的
//使用static_cast就可以把void*型指针转换为int*型指针
int *pa2=static_cast(p);
//static_cast:不允许指针之间类型转换
char *pc=&ch;
int *pa3=static_cast(pc);
//错误!!!
2)reinterpret_cast(expr)
可以实现无关类型之间的转换
char *pc=&ch;
int *pa3=reinterpret_cast(pc);
//相当于C语言,无关类型之间转换int a=3;
float b=reinterpret_cast(a);
//错误,这是相关类型的转换
3)const_cast(expr)
去除指针和引用的const属性(其他类型是允许const赋值给非const)
const int *p=&a;
int *p2=p;
//不可以把const指针转换为int*
int *p3=const_cast(p);
const int &la=a;
int &la2=la;
//不可以把引用转换为int*
int &la3=const_cast(la);
【C++类型转换详解】4)dynamic_cast(expr)运行时类型识别与检查,用于父类子类之间的转换
推荐阅读
- #|C语言每日一练——第195天(折半查找(升级版))
- C语言与C++编程|C语言中三块难啃的硬骨头
- C++篇|【C++进阶】第二十五篇——C++11(一)(列表初始化+变量类型推导+右值引用和移动语义+新的类功能+可变模板参数)
- 暑期实训|1.4.C语言基础进阶——红黑树
- 如何在C ++中打印Pascal三角形
- 如何解决C++错误C4996’getch’(不建议使用此项目的POSIX名称。而是使用符合ISO C和C ++的名称:_getch)
- c++|Python 什么时候会被取代()
- 老猿Python|Python+Pycharm和 VisualStudio C++社区版使用PK及易混淆的语法问题
- C++|Visual Studio高效调试手段与技巧总结(经验分享)