在C++中,有四种强制类型转换:
1、static_cast:这是最常见的类型转换。它可以用于基本数据类型之间的转换,也可以用于指向父类和子类之间的指针或引用的转换。
static_cast可以实现下列转换:
①基本数据类型之间的转换。
②将任何类型转换为void类型。
③把空指针转换成目标类型的指针。
④用于类层次结构中基类和派生类之间指针或引用的转换。
⑤向上转换(派生类转换为基类)是安全的;向下转换(基类转换为派生类)没有动态类型检查,是不安全的。
例如:
int i = 10;
double d = static_cast<double>(i); // 整型转为浮点型
2、dynamic_cast:主要用于处理基类和派生类之间的转换。如果类型转换不安全,它会返回空指针NULL。这是唯一一种在运行时执行类型检查的转换。
例如:
Base *b = new Derived();
Derived *d = dynamic_cast<Derived*>(b); // 基类指针转为派生类指针
if (d != nullptr) {
// 转换成功
} else {
// 转换失败
}
3、const_cast:这种类型转换用于修改常量对象的常量属性。需要注意的是,使用 const_cast 去掉常量性质并修改数据可能导致未定义的行为。
例如:
int num = 100;
const int* p1 = #
//将常量指针转换为普通类型指针,去除const属性
int* p2 = const_cast<int*>(p1);
*p2 = 200;
int a = 100;
const int& ra = a;
//将常量引用转换为普通类型引用,去除const属性
int& ra1 = const_cast<int&>(ra);
ra1 = 200;
注意:
const_cast<>只能用于转换指针或引用。
4、reinterpret_cast:这种类型转换允许进行任何指针或整型的转换。它可以将任何类型的指针转换为任何其他类型的指针,也可以将任何类型的指针转换
例如:
char c = 'a';
int d = reinterpret_cast<int&>(c);
int* p=NULL;
float* q = NULL;
p = reinterpret_cast<int*>(q);
q = reinterpret_cast<float*>(q);
注意:文章来源:https://www.toymoban.com/news/detail-632072.html
reinterpret_cast要转换的类型必须是指针类型、引用或算术类型。文章来源地址https://www.toymoban.com/news/detail-632072.html
到了这里,关于C++ 强制类型转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!