对于基类的指针或者引用向派生类的指针或者引用转换(down cast)的时候dynamic_cast提供动态类型检查,当转换失败的时候可以通过返回空指针或者抛出异常的方式来告知调用者(caller)转换失败了,而static_cast则不会进行动态检查,其像C语言中的强制类型转换一样,默认为可以转换,并且返回强制转换之后的指针或者引用,如果参与转...
long n=static_cast<long>(m);//宽转换,没有信息丢失 char ch=static_cast<char>(m);//窄转换,可能会丢失信息 int*p1=static_cast<int*>(malloc(10*sizeof(int)));//将void指针转换为具体类型指针 void*p2=static_cast<void*>(p1);//将具体类型指针,转换为void指针 double real=static_cast<double...
所以,当我们用static_cast将父类指针转换成子类指针时,编译器不报错。而dynamic_cast是在运行时执行类型转换,用于将基类的指针安全地转换成派生类的指针,也就是说,dynamic_cast会进行动态类型检查。dynamic_cast相当于给程序员提供了一种安全的机制,让程序员能够安全地使用父类指针的动态类型。 下面举一个使用dynamic...
static_cast < type-id > ( expression ),该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性 它主要有如下几种用法: (1)用于基本数据类型之间的转换,如把int转换为char,把int转换成enum,但这种转换的安全性需要开发者自己保证(这可以理解为保证数据的精度,即程序员能不能保证自己...
1、static_cast 关键字 static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,例如: 原有的自动类型转换,例如 short 转 int、int 转 double、const 转非 const、向上转型等; void指针和具体类型指针之间的转换,例如void *转int *、char *转void *等; ...
static_cast 用法:static_cast< type-id > ( expression ) 说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 来源:为什么需要static_cast强制转换? 情况1:void指针->其他类型指针 情况2:改变通常的标准转换 情况3:避免出现可能多种转换的歧义 ...
在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面将对它们一一的进行总结。 1. static_cast static_cast的转换格式:static_cast <type-id> (expression) 将expression转换为type-id类型,主要用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要在以下几...
static_cast是一种类型转换操作符,用于在不安全的转换时进行转换。它可以将一个数据类型转换为另一个数据类型,但是在进行转换时,编译器仍然执行类型检查,以确保所做的转换是安全的。当使用sta...
1 static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; ...