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

    技术2022-07-11  90

    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

    Processed: 0.041, SQL: 9