C++中的四种强制类型转换(静态、动态、去常、重解释)
2023-09-14 09:07:07 时间
强制类型转换
C++中有一套更安全的强制类型转换,分别是
1、静态类型转换
static_cast<目标类型>(源类型)
源类型和目标类型只要有一个方向可以隐式转换,那么两个方向都可以做静态类型转换,如果不能则报错
#include <iostream>
using namespace std;
int main(int argc,const char* argv[])
{
float num = 10;
cout << sizeof(static_cast<short>(num)) << endl;
int* p = NULL;
cout << static_cast<int>(p) << endl;
}
2、动态类型转换
dynamic_cast<目标类型>(源类型)
源类型和目标类型必须同是引用或指针,且目标类型和源类型之间存在继承关系,否则报错
#include <iostream>
using namespace std;
int main(int argc,const char* argv[])
{
int* p = NULL;
cout << dynamic_cast<long*>(p) << endl;
int num = 100;
cout << dynamic_cast<long>(num) << endl;
}
3、去常类型转换
const_cast<目标类型>(源类型)
源类型和目标类型必须同是引用或指针,且目标类型和源类型之间只有常属性的区别,否则报错
#include <iostream>
using namespace std;
int main(int argc,const char* argv[])
{
int* p = NULL;
cout << const_cast<const int*>(p) << endl;
cout << const_cast<long*>(p) << endl;
}
4、重解释类型转换
reinterpret_cast<目标类型>(源类型)
源类型和目标类型必须同是指针,或者一个指针一个整数,否则报错
#include <iostream>
using namespace std;
int main(int argc,const char* argv[])
{
cout << reinterpret_cast<int*>(100) << endl;
int* p = NULL;
cout << reinterpret_cast<int>(p) << endl;
cout << reinterpret_cast<short*>(p) << endl;
}
本贾尼·斯特劳斯特鲁普:如果让我重新设计,它们会更长。
原因:C++之父不希望程序员使用强制类型转换,如果程序中用到了强制类型转换则说程序设计的不完善,程序员应该去优化程序的设计而不应该强制类型转换。
相关文章
- [C++]VisualAssistX中文注释提示错误 解决办法
- VC++线程函数内怎么调用外部函数
- 进一步理解C++中的堆(Heap)
- 【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明
- C/C++ 静态链接库(.a) 与 动态链接库(.so)
- 创建单链表、二叉树(C++)
- Open3D (C++)球旋转算法(BPA)三维建模
- paip.java c# .net php python调用c++ c dll so windows api 总结
- CC++静态和质量分析: CppDepend 2022
- C++ 调用C封装DLL的两种方式(静态调用和动态调用)
- C++ 在函数中使用静态局部变量,让函数返回数组
- c++构造函数具体解释
- 【 华为OD机试 2023】 静态扫描 / 采用合理的缓存策略,最少需要的金币数(C++ Java JavaScript Python)
- 【华为OD机试 2023】 优秀学员统计(C++ Java JavaScript Python)
- C++中的四种强制类型转换(静态、动态、去常、重解释)
- C++判断两个指针指向的对象是否相同
- C++ static静态成员函数详解
- C++中类的(static)静态成员变量与(static)静态成员函数
- c++ 类中静态变量 static
- C++类中静态变量
- C++中全局变量、函数与静态变量、函数的区别
- C++11 静态断言—static_assert
- C++11 Function 使用场景
- C++算法之排序算法