C++ 强制类型转换
来源:互联网 发布:Java怎么存储多条记录 编辑:程序博客网 时间:2024/05/01 23:26
此文版权属于作者智勇,任何人、媒体或者网站转载、借用都必须征得作者本人同意
C++ 里的 cast-name
强制类型转换的分类:
-
dynamic_cast
将基类类型对象的引用或指针转换为同一继承层次中其他类型的引用或指针。例子如下:
// 指针的强制类型转换
if (Derived* pDerived = dynamic_cast<Derived*>(pBase))
{
// successd
}else{
// failure
}
// 引用的强制类型转换
try{
const Derived& derived = dynamic_cast<Derived&>(base);
}catch(bad_cast){
// handle the fact that the cast failed
}注意: dynamic_cast 只为带有一个或多个虚函数的类返回动态类型信息,对于其他类型,返回静态(即编译时)类型的信息。
注: 从基类获得派生类行为最好的方法是通过虚函数,只有在不可能使用虚函数的情况才使用 RTTI,因为这种机制比使用虚函数更容易出错:程序员必须知道应该将对象强制转换为哪种类型,并且检查转换是否成功!
-
const_cast
转换掉表达式的 const 性质。比如:
const char* pcStr;
char* pStr = const_cast<char*>(pcStr); -
static_cast
编译器隐式执行的任何类型转换都可以由 static_cast 显式完成:
double d = 100.0;
char c = static_cast<char>(d);
void* p;
double* pD = static_cast<double*>(p); -
reinterpret_cast
为操作数的位模式提供较低层次的重新解释:
int* pI;
char* pC = reinterpret_cast<char*>(pI);注意: reinterpret_cast 本质上依赖于机器。为了安全地使用它,要求程序员完全理解所设计的数据类型,以及编译器实现强制转换的细节。
建议: 避免使用强制类型转换
强制类型转换关闭或挂起了正常的类型检查。强烈建议避免使用它!特别是对于 reinterpret_cast。每次使用强制类型转换时,程序员应该仔细考虑是否还有其他不同的方法可以达到同一目的。如果非要强制转换不可,则应限制强制转换值的作用域,并且记录所有假定涉及的类型,这样能减少错误发生的机会。
- c++-----强制类型转换
- 【C++】强制类型转换
- C 强制类型转换
- C 强制类型转换
- C 强制类型转换
- C/C++强制类型转换。。。
- c/c++强制类型转换
- C语言类型强制转换
- c/c++强制类型转换
- C语言强制类型转换
- C中的类型强制转换
- c/c++强制类型转换
- C语言类型强制转换
- C/C++类型强制转换
- C语言强制类型转换
- C指针强制类型转换
- c/c++强制类型转换
- C/C++强制类型转换
- ActiveMQ 使用总结
- MSDN 技术资源库参考文档:
- 登录后默认转向登陆前的页面排除外部网站页面
- 啃"创建线程"一章的疑难解析: 通读Concurrent Programming in Java: Design Principles and Patterns (2)
- 如何学习Spring
- C++ 强制类型转换
- 原来DIIOP是这么用的!!!
- 有背景图片的button
- UMA铺设蜂窝网络和WLAN的融合之路
- AI2XAML's Bug
- 与asp中response.end()功能相同的语句
- 查詢一數據庫,再一條一條訪問
- APM
- 警告 C4251: : 类需要有 dll 接口由客户端的 类用于