C++-类型转换(static_cast, const_cast, reinterpret_cast)

static_cast 表示静态变量的类型转换, 如int->char, 不合适的类型转换将会发生错误

复制代码
/*
static_cast 类型转换 
*/ 
#include <iostream>

using namespace std; 

int main() {
    int* pi = NULL; 
    //char c = int(pi); //C++类型转换 
    //char c = (int)pi; //C类型转换 
    void* pc = pi; 
    pi = static_cast<int *>(pc); 
    char c = static_cast<int>(pi); //会出现报错,因为int* 无法转换为int类型  

}
复制代码

const_cast 表示const类型和非const类型的相互转换

复制代码
/* 
const_cast
*/
#include <iostream>

using namespace std; 

int main() {
    //volatile表示易变的,可以变化的 
    const volatile int ci = 100; //表示数字是易变 
    int* pi = const_cast<int *>(&ci); //进行地址的赋值操作
    *pi = 200; //对地址进行赋值 
    cout << *pi << endl; 
    cout << ci << endl; 
    cout << (void *)&ci << endl; 
    cout << pi << endl; 
}
复制代码

reinterpret_cast 表示进行隐式转换

复制代码
/*
进行隐式转换
*/ 
#include <iostream>

using namespace std; 

int main(void) {
    //\000 = "\0" --> 0 
    char buf[] = "0001\00012345678\000123456"; 
    struct Http {
        char type[5]; 
        char id[9]; 
        char passward[7]; 
    };
    Http *p_http = reinterpret_cast<Http*>(buf); 
    cout << p_http->type << endl; 
    cout << p_http->id << endl; 
    cout << p_http->passward << endl; 
    return 0; 
}
复制代码

 

posted @   c语言我的最爱  阅读(812)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示