读书人

c++中static_cast与dynamic_cast用法总

发布时间: 2013-10-03 17:28:15 作者: rapoo

c++中static_cast与dynamic_cast用法小结

static_cast:

1. 可用与基本数据类型之类型之间的转化, 但不可用与不同基本数据类型指针之间的转换

2. 可用于基于继承的指针对象或引用之间的转换,但是不是用动态类型识别机制


dynamic_cast:

用于基于继承的指针对象或引用之间的转换,基于动态类型识别机制,若两个指针对象类型不一致,则返回空指针。基于引用转换时,类型不一致则抛出bad_cast异常

下面为一个测试代码(代码不再解释)

#include <iostream>using namespace std;class A{public:virtual void foo() {}};class B{public:virtual void foo() {}};class C : public A, public B{public :/*virtual*/ void foo() {}};void bar1(A *pa){C *pc = dynamic_cast<C*>(pa);}void bar2(A *pa){C *pc = static_cast<C*>(pa);}void bar3(){C c;A *pa = &c;B *pb = static_cast<B*>(static_cast<C*>(pa));}int main(void){float floatValue = 21.7;int intValue = 7;cout << floatValue/7 << "\t\t" << static_cast<int>(floatValue)/7 << endl;cout << intValue/3 << "\t\t" << static_cast<double> (intValue)/3 << endl;int x = static_cast<int>(floatValue)/7;int *a = &intValue;float *b = &floatValue;//cout << static_cast<int*>(b) << endl;a = reinterpret_cast<int*>(b);return 0;}


读书人网 >C++

热点推荐