在类层次间进行上行转换时,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...
而使用dynamic_cast的转换则是同意的,结果是空指针。 3、reinterpret_cast意图运行低级转型,实际动作(及结果)可能取决于编译器。这也就表示它不可移植。比如将一个pointer to int转型为一个int,这一类转换在低级代码意外很少见到。 使用方法:reinpreter_cast<type-id>(expression_r_r) type-id必须是一个指针、引用...
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。 光说不练不行,下面就写几个使用static_cast的应用...
static_cast是可以使用的最简单的类型转换。它是编译时强制转换。它可以在类型之间进行隐式转换(例如int到float,或指针到void*),它还可以调用显式转换函数(或隐式转换函数)。 const_cast用法示例 下面是static_cast的11个使用场景示例: 1. 用于原C风格的隐式类型转换 ...
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 to member ...
reinterpret_cast C 语言风格类型转化(type)value 函数式风格类型转换type(value) 回答 static_cast是静态转换的意思,也就是在编译期间转换,转换失败的话会抛出一个编译错误。主要用于, 基本数据类型之间的转换。如把 int 转换成 char,把 int 转换成 enum。这种转换的安全性需要开发人员来保证。
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉exdivssion的const、volitale、或者__unaligned属性。
so,小结一下static_cast: 基本数据类型之间的转换,如把int转换成char,把int转换成enum 用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
Hint: For input, you can convert an int into an enum with static_cast. 1 2 3 4 DayOfWeek day;intdayNumber; cin >> dayNumber; day =static_cast<DayOfWeek>(dayNumber); and the output I am supposed to get should look like this: ...