首页 / C++ / C++中的四种强制类型转换总结
C++中的四种强制类型转换总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++中的四种强制类型转换总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1738字,纯文字阅读大概需要3分钟。
内容图文
![C++中的四种强制类型转换总结](/upload/InfoBanner/zyjiaocheng/613/f81331755578425d8438dc2486ba4ae1.jpg)
文章目录
C++中四种强制类型转换符:static_cast, reinterpret_cast, const_cast, dynamic_cast
注意:C++兼容C语言所以也支持C语言的转换风格
static_cast
static_cast用于非多态类型的转换(静态转换),编译器隐式执行的类型转换都可以用static_cast,但是不可用于两个不相关的类型转换
int main()
{
double d = 1.0;
int a = static_cast<int>(d);
}
reinterpret_cast
reinterpret_cast操作符通常用于将一种类型转换为另外一种类型
reinterpret_cast<type_id>(expression)
//type_id必须是一个指针,引用,函数指针,成员指针
注意:reinterpret_cast仅仅修改了操作数类型,只重新解释对象的比特模型而没有进行二进制转换
double *d = reinterpret_cast<double*>(n);
//注意此时d包含无用值,因为reinterpret_cast没有进行二进制转换
//仅仅将n的比特位复制到了d,所以通过reinterpret_cast生成的对象与原视值有相同的比特位
所以一般使用reinterpret_cast用来将转换后的类型值转换到其原视类型
const_cast
const_cast一般用来删除变量的const属性**
void Test()
{
const int n = 1;
int *p = const_cast<int *>(&n);
*p = 10;
}
dynamic_cast
dynamic_cast用来将一个父类对象的指针/引用转换为子类对象的指针/引用(动态转换)
向上转换:子类对象的指针/引用 转换为父类指针/引用 (这种情况不需要转换,因为赋值兼容)
向下转换:父类对象指针/引用 转换为子类指针/引用(此时使用dynamic_cast安全)
注意:
1.dynamic_cast只能用于含有虚函数的类,
2.dynamic_cast会先检查能否转换成功,可以成功转换则转换,不能则返回0
class A
{
public:
virtual void f() {}
};
class B : public A
{};
void fun(A* pa)
{
// dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回
B* pb1 = static_cast<B*>(pa);
B* pb2 = dynamic_cast<B*>(pa);
cout << "pb1:" << pb1 << endl;
cout << "pb2:" << pb2 << endl;
}
int main()
{
A a;
B b;
fun(&a);
fun(&b);
return 0;
}
//pb1:00AFFADC
//pb2:00000000
//pb1:00AFFAD0
//pb2:00AFFAD0
内容总结
以上是互联网集市为您收集整理的C++中的四种强制类型转换总结全部内容,希望文章能够帮你解决C++中的四种强制类型转换总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。