基本概念
- 给无符号类型赋予一个超出其范围的初始值时,就会发生隐式类型转换
C语言强制类型转换
C++强制类型转换
1. 用于内置类型的转换,不可用于内置类型指针的转换:char* pc=static_cast<char*>(pi)
2. 可用于相关类型转换,如整型与实型之间的转换
void test()
{
float f = 1.2;
int i = static_cast<int>(f);
cout << i << endl;
}
3. 还可用于void*与其他类型指针之间(包括非内置类型指针)的转换
void test()
{
int* p = static_cast<int*>(malloc(sizeof(int)));
cout << p << endl;
}
4. 子类转成父类类型:Parent p=static_cast<Parent>(c);
1. 主要用于类层次之间的转换:父类子类之间的转换,还可用于类之间的交叉转换
2. 具有类型检查功能,比static_cast更安全
1. 用于移除x的const属性。x必须是指针、引用、或指向某个对象类型成员的指针
2. 通常不是为了修饰对象,而为了给函数传参时函数可以接受该对象
3. const int& r1=10; int& r2=const_cast<int&>(r1); r2=20;
void show(int* p)
{
*p = 10;
}
void test()
{
const int a = 5;
int* pa = const_cast<int*>(&a);
show(pa);
cout << "a=" << a << endl;
cout << "*pa=" << *pa << endl;
cout << "&a=" << &a << endl;
cout << "pa=" << pa << endl;
int& b = const_cast<int&>(a);
b = 3;
cout << a << endl;
cout << b << endl;
}
1. 用于无关类型之间的转换,将内容重新解释为另一种不同的类型
2. 用于指针类型之间的转换、整数和指针类型的转换
3. 原理是直接从二进制位进行复制,但是是一种极其不安全的转换
4. 随便怎么转,编译器都不会报错,所以极其危险
- int* p=reinterpre_cast<int*>(pc);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律