請問 static_cast 的作用與使用時機?

星際訪客 2013-06-07 02:47:28
相較 dynamic_cast 與 RTTI 有關...不知 static_cast 的用法為何?
...全文
84 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
星際訪客 2013-06-09
引用 2 楼 sololie 的回复:
static_cast<T>(运算表达式) 它将"运算表达式"的值转换为T类型的值, 这种类型转换只适用于表达式的类型与类型T之间有适应的关系的情形。 static_cast 的类型转换能力虽然较弱,但是更安全。此时,编译器将会指出不恰当的类型转换。 示例: void *s static_cast<char*>(s); 在C++中,T* 和 void* 相互之间是适应的,基本数据类型中的整形与字符类型、 整形与实数类型之间是适应的。我们可以使用该操作符进行此类强制类型转换。 reinterpret_cast<T>(运算表达式) 这里,T可以是指指针类型、引用、算术类型或指向函数的指针类型。使用该操作符, 指针可以被解释为整数类型的值,整数类型的值可以被解释为指针。 在将指针转换为整数,再将结果转换为指针时,转换结果与愿指针相同。 该操作符用于替代C中与实现相关的或不安全的强制转换。 例如: char *ps; struct A { char ps[100]; }; A *pa; ps = reinterpret_cast<char *ps>(pa); 在c++中,reinterpret_cast 是最强有力的类型转换操作符。如果使用不当,会给程序造成严重的运行时错误。 const_cast<T>(运算表达式) 设"运算表达式"的类型为 V,则T必须是由V进const/volatile修饰符修饰之后得到的派生类型,或反之。 该强制类型转换表达式的结果类型是T。 dynamic_cast<T>(运算表达式) .......
清晰明瞭...超感謝!
回复
星際訪客 2013-06-09
引用 1 楼 akirya 的回复:
static_cast是编译时做的转换,能够检测一些的错误转换。 dynamic_cast是运行时才做的转换
謝謝!
回复
static_cast是编译时做的转换,能够检测一些的错误转换。 dynamic_cast是运行时才做的转换
回复
sololie 2013-06-07
static_cast<T>(运算表达式) 它将"运算表达式"的值转换为T类型的值, 这种类型转换只适用于表达式的类型与类型T之间有适应的关系的情形。 static_cast 的类型转换能力虽然较弱,但是更安全。此时,编译器将会指出不恰当的类型转换。 示例: void *s static_cast<char*>(s); 在C++中,T* 和 void* 相互之间是适应的,基本数据类型中的整形与字符类型、 整形与实数类型之间是适应的。我们可以使用该操作符进行此类强制类型转换。 reinterpret_cast<T>(运算表达式) 这里,T可以是指指针类型、引用、算术类型或指向函数的指针类型。使用该操作符, 指针可以被解释为整数类型的值,整数类型的值可以被解释为指针。 在将指针转换为整数,再将结果转换为指针时,转换结果与愿指针相同。 该操作符用于替代C中与实现相关的或不安全的强制转换。 例如: char *ps; struct A { char ps[100]; }; A *pa; ps = reinterpret_cast<char *ps>(pa); 在c++中,reinterpret_cast 是最强有力的类型转换操作符。如果使用不当,会给程序造成严重的运行时错误。 const_cast<T>(运算表达式) 设"运算表达式"的类型为 V,则T必须是由V进const/volatile修饰符修饰之后得到的派生类型,或反之。 该强制类型转换表达式的结果类型是T。 dynamic_cast<T>(运算表达式) .......
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2013-06-07 02:47
社区公告
暂无公告