chara ='a';intb = static_cast<char>(a);//正确,将char型数据转换成int型数据double*c =newdouble;void*d = static_cast<void*>(c);//正确,将double指针转换成void指针inte =10;constintf = static_cast<constint>(e);//正确,将int型数据转换成const int型数据constintg =20;int*h = static_ca...
如果new type为void类型,static_cast将会在计算表达式的值之后丢弃这个值,无法使用变量接到这个值。 static_cast<void>(v2.size()); int a = static_cast<void>(v2.size()); //error,void value not ignored as it ought to be 6.上行转换,同时将数组转换为指针 struct B { int m = 42; const cha...
static_cast<>在 C++ 中是一种用于执行显式类型转换的运算符,它在编译时检查类型转换的有效性,比 C 风格的强制转换(如(int)x)提供了更强的类型检查。 基本类型之间的转换 用于基本数据类型(如 int、float、double 等)之间的转换,使得不同类型的数据可以进行操作。 1 2 inti = 10; floatf =static_cast<fl...
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 来源:为什么需要static_cast强制转换? 情况1:void指针->其他类型指针 情况2:改变通常的标准转换 情况3:避免出现可能多种转换的歧义 它主要有如下几种用法: 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子...
对于static_cast,上行转换时安全的,而下行转换时不安全的 因为static_cast的转换时粗暴的,它仅根据类型转换语句中提供的信息(尖括号中的类型)来进行转换,这种转换方式对于上行转换,由于子类总是包含父类的所有数据成员和函数成员,因此从子类转换到父类的指针对象可以没有任何顾虑的访问其(指父类)的成员。
隐式转换(implicit conversion) C风格显式转换(C style explicit conversion) 上行转换(up-casting)与下行转换(down-casting) static_cast (expression) 静态转换 dynamic_cast (expression) 动态转换 ...
最简单的上行(xing)转换 比如B继承自A,B转换为A,进行上行转换时,是安全的,如下: #include<iostream>usingnamespacestd;classA{// ...};classB:publicA{// ...};intmain(){B*pB=newB;A*pA=dynamic_cast<A*>(pB);// Safe and will succeed} 多重继承之间...
1 static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; ...
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 classBase{public:intm_iNum;virtualvoidfoo();};classDerived:publicBase{public:char*...