C++类型转换基本语法

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++类型转换基本语法相关的知识,希望对你有一定的参考价值。

static_cast 用于内置的数据类型
还有具有继承关系的指针或者引用

代码如下:

#include <iostream>
using namespace std;

class Building {};
class Animal{};
class Cat:public Animal{};

int main()
{
	int a = 97;
	char c = static_cast<char>(a);
	cout << c << endl;
	int *p = nullptr;
	//char *sp = static_cast<char*>(p); 转不了

	Building *building = nullptr;
	//Animal *ani = static_cast<Animal *>(building); 转不了

	//父类指针转成子类指针
	Animal *ani = nullptr;
	Cat *cat = static_cast<Cat*> (ani);

	//子类指针转成父类指针
	Cat *soncat = nullptr;
	Animal *anifather = static_cast<Animal *> (soncat);
	
	Animal aniobj;
	Animal &aniref = aniobj;

	Cat&cat = static_cast<Cat &>(aniref);

	Cat catobj;
	Cat & catref = catobj;
	Animal & anifather2 = static_cast<Animal &> (catref);




	return 0;
}

dynamic_cast 转换具有继承关系的指针或者引用,在转换前会进行对象类型检查,只能由子类型转换为基类型。

子类指针可以转换为父类指针(从大到小),类型安全。

父类指针转成子类指针(从小到大),不安全。

代码如下:

#include <iostream>
using namespace std;

class Building {};
class Animal{};
class Cat:public Animal{};

int main()
{
	int a = 10;
	//char c = dynamic_cast<char>(a);  转换不了

	Animal *ani = nullptr;
	//Building *building = dynamic_cast<Building *>(ani);  转换不了

	Animal * ani = nullptr;
	//Cat * cat = dynamic_cast<Cat *>(ani);  转换不了

	Cat * cat = nullptr;
	Animal *ani = dynamic_cast<Animal*>(cat);

	return 0;
}

const_cast增加或者去除变量的const性。

代码如下:

#include <iostream>
using namespace std;

class Building {};
class Animal{};
class Cat:public Animal{};

int main()
{
	int a = 10;
	const int &b = a;
	int &c = const_cast<int &>(b);
	c = 20;
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;

	const int *p = nullptr;
	int *q = const_cast<int*>(p);

	int *p3 = nullptr;
	const int *p4 = const_cast<const int *>(p3);

	return 0;
}

reinterpret_cast 强制类型转换

代码如下:

#include <iostream>
using namespace std;

class Building {};
class Animal{};
class Cat:public Animal{};

int main()
{
	Building *building = nullptr;
	Animal *ani = reinterpret_cast<Animal *> (building);

	typedef void(*FUNC1)(int, int);
	typedef int(*FUNC2)(int, char*);

	FUNC1 func1;
	FUNC2 func2 = reinterpret_cast<FUNC2>(func1);

	return 0;
}

以上是关于C++类型转换基本语法的主要内容,如果未能解决你的问题,请参考以下文章

C++中operator用法

强制转换(基本语法)

C++语法 第二篇 基本类型

在代码片段中包含类型转换

C++基础语法梳理:智能指针和强制类型转换运算符

python基本语法