C++ 补充 & C++ 11 - C++ 类型转换简介

C++ 类型转换简介

1.1 C++类型转换详解

旧式转型 C风格的强制类型:

TYPE b = (TYPE) a     
例如:  
int i = 48;
char c = (char) i;

新式转型C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。

格式:
	    TYPE b = 类型操作符<TYPE> ( a )   
       类型操作符= static_cast | reinterpreter_cast | dynamic_cast | const_cast 

1.2 static_cast

静态类型转换(斯文的劝导,温柔的转换)。如int转换成char
主要用法:

用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。上行指针或引用(派生类到基类)转换安全,下行不安全

用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。

把空指针转换成目标类型的空指针。

把任何类型的表达式转换成void类型。

demo 代码(一)

#include <iostream>

using namespace std;

void dothing(void* arg)
{
	int* int_arg = (int*)arg;
}

struct dog_
{
	int age;
};

int main(void)
{
	double PI = 3.1415926;

	int i = PI; /* 隐式转换 */
	int i1 = (int)PI; /* 强制类型转换,把double转换为int */
	int i2 = static_cast<int>(PI);

	// struct dog_* dp = static_cast<struct dog_*>(&PI); NO! 

	int* addr = (int*)0x888888; /* 强制类型转换,整数直接变指针。*/
	// int* addr1 = static_cast<int*>(0x888888); /* 会报错 */
	int* addr2 = reinterpret_cast<int*>(0x888888);

	system("pause");
	return 0;
}

编译执行:

reinterpret_cast

重新解释类型(挂羊头,卖狗肉) 不同类型间的互转,数值与指针间的互转

用法: TYPE b = reinterpret_cast ( a )
TYPE必须是一个指针、引用、算术类型、函数指针.

忠告:滥用 reinterpret_cast 运算符可能很容易带来风险。 除非所需转换本身是低级别的,否则应使用其他强制转换运算符之一。

结语:

时间:2020-07-01

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章