dynamic_const的语法形式如下:dynamic_const<T> (expression)dynamic_const的用途是将expression的类型转换为T。在上面的语法形式中,T代表一个类型,它必须是以下三种类型之一:类的指针类型类的引用类型void*那么相应的,expression也必须是类的指针或者是类的引用。注意不能是void*,否则会出现编译错误。从上面的描述可知,dynamic_const操作的对象都是关乎类的,它不能作用在C++中的内置对象(比如int)上。而且对类还有一个特殊的要求,就是类必须要有虚函数。如果T所相关的类没有虚函数,则会出现编译错误。dynamic_const的返回值有两种:1 返回expression的值。在以下几种情况下会返回这个值。 ①如果expression指向的对象的类型是A,并且T关乎的那个类是A的基类。 ②T为void*
③如果expression指向的对象确实能转换为类型T。(比如确实指向一个T类型的对象)2 返回NULL。 不满足上述1的情况就会返回NULL。下面是一个dynamic_const的例子:#include <iostream>using namespace std;
class A{ private: int a; public: virtual void print(){ cout<<"A class"<<endl; }};
class B : public A{ private: int b; public: virtual void print(){ cout<<"B class"<<endl; }};
class C : public A{ private: int c; public: virtual void print(){ cout<<"C class"<<endl; }};
int main(){
A* pa = new B(); B * pb = new B(); A * pb2 = dynamic_cast<A*>(pb); C * pb3 = dynamic_cast<C*>(pb);
B *pa2 = dynamic_cast<B*>(pa);//OK void * pb4 = dynamic_cast<void*>(pb); if(pb2){//不为NULL cout<<"pb2 is not null"<<endl; pb2->print(); } if(pb3){ //为NULL pb3->print(); cout<<"pb3 is not null"<<endl; } if(pb4){ //不为NULL cout<<"pb4 is not null"<<endl; } }
