在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_ca...
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_ca...
int *ni = static_cast<int *>(nv); std::cout << "6) *ni = " << *ni << '\n'; 控制台输出 6) *ni = 3 9.枚举转int(scoped enum to int) 将枚举代表的值转换为int enum class E { ONE = 1, TWO, THREE }; E e = E::TWO; int two = static_cast<int>(e); std::cout ...
控制台输出 8. void*转换到具体类型(inverse of implicit conversion),static_cast可以提取void*类型中的值 控制台输出 9. 枚举转int(scoped enum to int),将枚举代表的值转换为int 10. int转enum以及enum转为其他enum(int to enum, enum to another enum)11. 成员指针的上行转换(pointer ...
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉exdivssion的const、volitale、或者__unaligned属性。
用于基本数据类型之间的转换。如把int转换成char。把int转换成enum。 这样的转换的安全性也要开发者来保证。 把空指针转换成目标类型的空指针。 把不论什么类型的表达式转换成void类型。 注意:static_cast不能转换掉expression_r_r的const、volitale、或者__unaligned属性。
so,小结一下static_cast: 基本数据类型之间的转换,如把int转换成char,把int转换成enum 用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。③把空指针转换成目标类型的空指针。④把任何类型的表达式转换成void类型。注意:static_cast不能转换掉exdivssion的const、volitale、或者__unaligned属性。3.2dynamic_cast用法:dynamic_casttype-id(exdivssion)...
structA{};structB{};int*p;static_cast<A*>(p);// 显然编译错误A*p;static_cast<B*>(p);//...
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉exdivssion的const、volitale、或者__unaligned属性。