static_cast无法像const_cast一样对将常量转换为non-const类型,无法将某种类型的指针转换为其他不相关的其他\
类型的指针,也无法将指针转换为int(毕竟在64位系统下指针为64位而int为32位)等等,也就是说无法完成C++\
规则认为的没有意义的转换。
static_cast主要应用于两种转换:
- 如果用户定义了相关的构造函数或转换例程,可以使用static_cast进行类型转换。
- 在继承体系中使用static_cast进行向下转型。只能用于指针或者引用,不能应用于对象本身。
下面是这两种转换的实例代码:
#include <iostream>
using namespace std;
class B{
private:
int data;
public:
B(){ data = 99; }
virtual ~B(){}
int getData(){ return data; }
};
class A{
private:
int data;
public:
A(){}
A(B& b) :data(b.getData())
{}
virtual ~A(){}
void desc(){
cout << "data:" << data << endl;
}
};
class C :public A{
public:
void cfunc(){
cout << "cfunc" << endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B b;
A a = static_cast<A>(b); //即使没有static_cast也能进行转型,起一种提醒作用
C *pc = static_cast<C*>(&a); //指针向下转型
C& rc = static_cast<C&>(a); //引用向下转型
rc.desc(); //data:99
pc->desc(); //data:99
a.desc(); //data:99
system("pause");
return 0;
}