High*pb = static_cast<High *>(&blow);//blow是派生类,pb是基类的指针,因此这里是向上转换,合法【基类指针本身就可指向派生类指针】Low *pl = static_cast<Low *>(&bar);//bar是基类,pl是派生类指针,因此是向下转换,合法【但是要注意向下转换虽合法,但不安全,因为向下转换,访问到成员变量可能会崩溃,一...
test success!int main() { 007F1030 push ebp 007F1031 mov ebp,esp 007F1033 ...
C风格的强制类型转换和编译器自己能够进行的隐式类型转换都可以用static_cast显示完成转换(一般隐式转换让系统内部自己转就好了,不需要static_cast转换)。 与C风格的强制类型转换一样,使用static_cast也要保证转换的安全性和正确性,比如int i = (int)“asa”这种情形不应该出现。 dynamic_cast显示转换 含义:dynamic...
D= static_cast<Drived*>(B);//正确,通过使用static_cast向下转型 需要注意的是:static_cast的使用,当且仅当类型之间可隐式转化时,static_cast的转化才是合法的。有一个例外,那就是类层次间的向下转型,static_cast可以完成类层次间的向下转型,当时向下转型无法通过隐式转换完成! 2.2 通过dynamic_cast完成向下转...
//向下转型 m_pderive = static_cast<Derive*>(m_pbase); //既然都转换成了派生类指针,那么调用派生类函数 //m_pbase->fun2(); //这个时候编译就错误了,所以是不安全的 m_pderive->fun2(); return 0; } 1. 2. 3. 4. 5. 6. 7. ...
需要注意的是,static_cast 并不进行运行时类型检查,因此在执行向下转换时,如果转换的指针或引用实际上不指向正确的派生类对象,可能会导致未定义的行为。为了进行安全的向下转换,可以使用 dynamic_cast 运算符。 此外,static_cast 还可以用于一些其他转换,例如将枚举类型转换为整数类型、指针转换为 void* 类型等。 需要...
每页4kb),这个内存大小一般来说是要比构造对象所需的内存大,因此向下转换一般也不会越界,所以能运行...
```cppclass Base {};class Derived : public Base {};Derived d;Base* pb = &d; // pb 实际上指向 Derived 对象Derived* pd = static_cast<Derived*>(pb); // 正确转换,pd 现在指向 d```3. **向下转换(派生类到基类)**:当你有一个派生类对象并希望将其视为基类对象时,可以使用 `static_cast...
dynamic_cast进行的是运行时的类型转换,可以在基类和派生类之间进行类型转换,并且能够检查类型是否符合转换。如果转换失败,则返回空指针或抛出std::bad_cast异常。主要用于向下转型(父类指针或引用转为子类指针或引用),但只有当父类指针或引用真正指向子类对象时才能成功转换。例如: Derived d; Base* ptrB = &d; ...
Static cast的实现原理主要是通过将源类型的数据强制转换为目标类型的数据,编译器在编译时会进行类型检查,如果类型不匹配或者存在不安全的转换,编译器会给出错误提示。Static cast主要用于以下几种情况: 1.在进行向下转换(派生类指针或引用转换为基类指针或引用)时,static_cast可以实现基类指针或引用向派生类指针或引用...