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