传统的A* a = (A*)p强制类型转换相当于static_cast,得到的总是一个内存地址,而dynamic_cast则更安全,转换失败会得到NULL。 dynamic_cast和static_cast区别用如下例子程序非常容易理解: class Base { public: virtual ~Base(){}; }; class A : public Base { }; class B : public Base { }; int ...
改成static_cast也是能正确打印的,但会是危险的,因为明显a强制转换成了B*指针,而b强制转换成了A*指针: intmain(){Base*a=newA();Base*b=newB();if(A*p=static_cast<A*>(b)){cout<<"A instance"<<endl;}if(B*p=static_cast<B*>(a)){cout<<"B instance"<<endl;}return0;} 有了dynamic_cas...
#include<iostream>using namespace std;classBase{int a;public:voidbaseMethod(){cout<<"Base method"<<endl;};};classChildClass:publicBase{int b;public:voidchildMethod(){cout<<"child method"<<endl;};};intmain(){/* 上行转换 */ChildClass child;Base b=static_cast<Base>(child);b.baseMethod...
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 classB { public: int...
C++风格:static_cast、dynamic_cast、reinterpret_cast、和const_cast.. 关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、...
(static_cast,dynamic_cast,const_static,reinterpret_cast) 1 static_cast (1)用于基本的数据类型转换(char,int),及指针之间的转换 test_enum type = test_enum_1; chara ; intb =static_cast<int>(a); charc =static_cast<char>(b); type =static_cast<test_enum>(b); ...
C++中总共有四个强制类型转换操作符:reinterpert_cast、static_cast、const_cast、dynamic_cast。强制类型转换,也称为显式转换,接下来我们讲讲static_cast这个强制类型转换操作符。 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
我已经读到,static_cast发生在编译时,dynamic_cast发生在运行时,因此比static_cast慢。dynamic_cast可以返回空ptr (与指针一起使用时),也可以抛出错误的强制转换异常。我的问题是,reinterpret_cast和const_cast是在编译时还是在运行时发生的?我认为解释强制转换发生在运行时,因为它的行为类似于dynamic_cast,指示转换是...
C++中总共有四个强制类型转换操作符:reinterpert_cast、static_cast、const_cast、dynamic_cast。强制类型转换,也称为显式转换,接下来我们讲讲static_cast这个强制类型转换操作符。 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
在简单的情况下,上面这种类型转换可以很好地工作,但在C++中往往还是不够的,为此ANSI-C++新标准定义的四个转换符,即static_cast、dynamic_cast、reinterpret_cast和const_cast。同时在C++环境中,原先的C-Style的类型转换仍旧可以使用。 1) static_cast 用法:static_cast <typeid> (expression) ...