对于上行转换,static_cast和dynamic_cast效果一样,都安全; 对于下行转换:你必须确定要转换的数据确实是目标类型的数据,即需要注意要转换的父类类型指针是否真的指向子类对象,如果是,static_cast和dynamic_cast都能成功;如果不是static_cast能返回,但是不安全,可能会出现访问越界错误,而dynamic_cast在运行时类型检查过程...
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的。 进行下行转换(把基类的指针或引用转换成派生类表示),由于没有动态类型检查,不安全。 用于基本数据类型之间的转换 把空指针转换成目标类型的空指针 把任何类型的表达式转换成void类型 2. dynamic_cast 用于将一个父类对象的指针/引用转换为子类对象的指针...
它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用。 dynamic_cast: (1)其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。 (2)不能用于内置的基本数据类型的强制转换。 (3)dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败...
两个dynamic_cast都是下行转换,第一个转换是安全的,因为指向对象的本质是子类,转换的结果使子类指针指向子类,天经地义;第二个转换是不安全的,因为指向对象的本质是父类,“指鹿为马”或指向不存在的空间很可能发生! reinterpret_cast (expression) 重解释转换 这个转换是最“不安全”的,两个没有任何关系的类指针...
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。在多态类型之间的转换主要使用dynamic_cast,因为类型提供了运行时信息。下面我将分别在以下的几种场合下进行dynamic_cast的使用总结:...
来源:为什么需要static_cast强制转换? 情况1:void指针->其他类型指针 情况2:改变通常的标准转换 情况3:避免出现可能多种转换的歧义 它主要有如下几种用法: 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引...
...在类层次间进行上行转换时,dynamic_cast和static_cast 的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast 更安全。...另外要注意:B要有虚函数,否则会编译出错;static_cast 则没有这个限制。...dynamic_cast 在运行效率上比 static_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,上行转换时安全的,而下行转换时不安全的 因为static_cast的转换时粗暴的,它仅根据类型转换语句中提供的信息(尖括号中的类型)来进行转换,这种转换方式对于上行转换,由于子类总是包含父类的所有数据成员和函数成员,因此从子类转换到父类的指针对象可以没有任何顾虑的访问其(指父类)的成员。