网站建设书籍在线阅读,帮企业建网站步骤,深圳做营销网站的公司简介,wordpress发布视频链接前言 大家好吖#xff0c;欢迎来到 YY 滴C系列 #xff0c;热烈欢迎#xff01; 本章主要内容面向接触过C的老铁 主要内容含#xff1a; 欢迎订阅 YY滴C专栏#xff01;更多干货持续更新#xff01;以下是传送门#xff01; 目录 一.回顾C语言中的类型转换1#xff09… 前言 大家好吖欢迎来到 YY 滴C系列 热烈欢迎 本章主要内容面向接触过C的老铁 主要内容含 欢迎订阅 YY滴C专栏更多干货持续更新以下是传送门 目录 一.回顾C语言中的类型转换1隐式类型转化※隐式类型转换会出现的坑点 2显式类型转化 二.C的四种类型转换引入为什么C需要四种类型转换1static_cast——相关类型/相近类型的相互转换2reinterpret_cast——不相关类型的相互转换3const_cast——去掉const属性后的相关类型/相近类型的相互转换4dynamic_cast——继承中父子对象之间的相互转换 一.回顾C语言中的类型转换 引入 在C语言中如果赋值运算符左右两侧类型不同或者形参与实参类型不匹配或者返回值类型与接收返回值类型不一致时就需要发生类型转化C语言中总共有两种形式的类型转换隐式类型转换和显式类型转换。 1隐式类型转化 编译器在编译阶段自动进行能转就转不能转就编译失败 int main()
{int i 1;// 隐式类型转换double d i;printf(%d, %.2f\n, i, d);return 0;
}※隐式类型转换会出现的坑点 如下图所示 数字在计算机中的存储逻辑和现实生活中人们一般理解的不太一样是位形式存储的所以当pos设置为0时程序会如此出错 2显式类型转化 需要用户自己处理 int main()
{int i 1;int* p i;// 显示的强制类型转换int address (int)p;printf(%p, %d\n, p, address);return 0;
}二.C的四种类型转换
引入为什么C需要四种类型转换 C风格的转换格式很简单但是有不少缺点的 隐式类型转化有些情况下可能会出问题比如数据精度丢失显式类型转换将所有情况混合在一起代码不够清晰 因此C提出了自己的类型转化风格注意因为C要兼容C语言所以C中还可以使用C语言的 转化风格。 规范的 具体体现 如果用户使用了不符合规范的类型转换编译器会标红编译无法通过 1static_cast——相关类型/相近类型的相互转换
int main()
{// 相关类型/相近类型double d 12.34;int a static_castint(d);cout a endl;return 0;
}2reinterpret_cast——不相关类型的相互转换
int main()
{// 不相关类型int* p1 a;int address reinterpret_castint(p1);return 0;
}3const_cast——去掉const属性后的相关类型/相近类型的相互转换
int main()
{// 去掉const属性volatile const int n 10;int* p2 const_castint*(n);return 0;
}4dynamic_cast——继承中父子对象之间的相互转换 子类继承了父类子类给父类赋值为“向上转换”天然支持父类给子类赋值称为“向下转换”不支持 有些成员变量会为随机值 class A
{
public:virtual void f() {}int _x 0;
};class B : public A
{
public:int _y 0;
};void fun(A* pa)
{// pa是指向子类对象B的转换可以成功正常返回地址// pa是指向父类对象A的转换失败返回空指针B* pb dynamic_castB*(pa);if (pb){cout 转换成功 endl;pb-_x;pb-_y;}else{cout 转换失败 endl;}
}