C++:类型转换
Posted studying~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++:类型转换相关的知识,希望对你有一定的参考价值。
一.静态转换
static_cast<待转换的类型>(待转换的数据)
1.static_cast可以用来转换基本的内置数据类型 int char double…
2.static_cast不能转换没有发生继承关系之间的类
3.static_cast可以用来转换发送继承关系之间的类,但是不保存安全性
4.不能用来转换指针
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <string>
using namespace std;
void test01()
{
//static_cast 用来转换内置的数据类型 和c语言的强制类型转换一样
int a = 1;
char b = 2;
double c = 3.14;
a = static_cast<int>(b);
a = static_cast<int>(c);
c = static_cast<double>(a);
}
class A
{
public:
int a;
};
class B:public A
{
public:
int b;
};
void test02()
{
A *p1 = new A;
B *p2 = new B;
//static_cast不能转换没有发生继承关系之间的类
//如果两个类之间发生了继承关系,可以类型转换 但是static_cast不会保证转换的安全性
p1 = static_cast<A *>(p2);//子转父 向上转换 是安全的
p2 = static_cast<B*>(p1);//父转子 向下转换 是不安全的 且没有错误提示
}
void test03()
{
int *p1 = NULL;
char *p2 = NULL;
//static_cast不能用来转指针
//p1 = static_cast<int *>(p2);
}
int main() {
return 0;
}
二.动态转换
1.不能用于转换基本的数据类型
2.可以用于转换发送继关系之间的类,保证转换是安全的 子转父是可以的
3.如果发生了多态,子转父和父转子总是安全的
void test04()
{
//动态转换不能转内置的基本数据类型
int a = 1;
char b = 2;
//a = dynamic_cast<int>(b);
}
void test05()
{
A *p1 = new A;
B *p2 = new B;
//dynamic_cast不能用于没有发生继承关系之间的类转换
//dynamic_cast可以用于发生继承关系之间的类号转换
p1 = dynamic_cast<A *>(p2);//子转父 是安全的
//p2 = dynamic_cast<B*>(p1);//父转子 不安全 不允许 且有错误提示
}
三.常量转换
const_cast 一般用来加const或去除const
//const转换
void test06()
{
int *p1 = NULL;
const int *p2 = NULL;
//int *p1 = static_cast<int *>(p2);
p1 = const_cast<int *>(p2);
p2 = const_cast< const int *>(p1);
}
四.重新解释转换
reinterpret_cast 一般用来转换指针 整数和指针之间都可以转换
//reinterpret_cast
void test07()
{
int *p = NULL;
char *p2 = NULL;
p = reinterpret_cast<int *>(p2);
p2 = reinterpret_cast<char *>(p);
int c = 0;
c = reinterpret_cast<int>(p2);
}
五. 总结
static_cast 一般用来转换内置的基本数据类型
dynamic_cast 一般用来转发生继承关系之间的自定义的数据类型
const_cast 一般用来转换加const和去除const
reinterpret_cast 一般用来转指针
以上是关于C++:类型转换的主要内容,如果未能解决你的问题,请参考以下文章