对于static_cast,上行转换时安全的,而下行转换时不安全的 因为static_cast的转换时粗暴的,它仅根据类型转换语句中提供的信息(尖括号中的类型)来进行转换,这种转换方式对于上行转换,由于子类总是包含父类的所有数据成员和函数成员,因此从子类转换到父类的指针对象可以没有任何顾虑的访问其(指父类)的成员。 而对于下行...
因此这里是向上转换,合法【基类指针本身就可指向派生类指针】Low *pl = static_cast<Low *>(&bar);//bar是基类,pl是派生类指针,因此是向下转换,合法【但是要注意向下转换虽合法,但不安全,因为向下转换,访问到成员变量可能会崩溃,一般使用动态转换】
进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。 2.用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 3.把空指针转换成目标类型的空指针。 4.把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉exdivss...
在进行下行转换时,dynamic_cast具有类型检查的功能,比 static_cast更安全。向上转换即为指向子类对象。向下转换,即将父类指针转化子类指针。向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。 参考例子: 1 2 3 4 5 6 7 8 9 10 11 1...
C风格显式转换(C style explicit conversion) 要去掉上述waring很简单,熟悉C语言的程序员知道,有两种简单的写法(C风格转换与函数风格转换): double a=2000.3; short b; b = (short) a; // c-like cast notation b = short (a); // functional notation ...
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 classBase{public:intm_iNum;virtualvoidfoo();};classDerived:publicBase{public:char*...
Static_cast的优势在于它在编译时进行类型检查,可以提前发现潜在的类型错误,避免在运行时出现错误。它是一种比较安全的类型转换方式。 Static_cast的应用场景包括但不限于: 类型转换:当需要将一个类型转换为另一个类型时,可以使用Static_cast进行转换。 父子类指针或引用的转换:当需要将指向父类的指针或引用转换为指...
...在类层次间进行上行转换时,dynamic_cast和static_cast 的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast 更安全。...另外要注意:B要有虚函数,否则会编译出错;static_cast 则没有这个限制。...dynamic_cast 在运行效率上比 static_cast 要差一些,但 static_cast 在更宽上...
8) 一个没有明确声明为const的成员函数被看作是将要修改对象中数据成员的函数,而且编译器不允许它为一个const对象所调用。因此const对象只能调用const成员函数。 9) const类型变量可以通过类型转换符const_cast将const类型转换为非const类型; 10) const类型变量必须定义的时候进行初始化,因此也导致如果类的成员变量有co...
而对于下行转换为什么不安全,是因为static_cast只是在编译时进行类型坚持,没有运行时的类型检查,具体原理在dynamic_cast中说明。 二、dynamic_cast关键字(运行时类型检查) 用法:同static_cast dynamic_cast主要用于类层次结构中父类和子类之间指针和引用的转换,由于具有运行时类型检查,因此可以保证下行转换的安全性,何...