前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】类型转换 ① ( C 中的类型转换 | C++ 类型转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast )

【C++】类型转换 ① ( C 中的类型转换 | C++ 类型转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast )

作者头像
韩曙亮
发布2023-11-27 10:20:50
1870
发布2023-11-27 10:20:50
举报

一、C 语言中的类型转换


1、C 语言类型转换简介

C 语言中 , 类型转换 是常用操作 , 借助该机制 , 将不同数据 的 数据类型 进行转换 ;

C 语言类型转换种类 : 主要是 静态类型转换 ( 隐式类型转换 ) 和 动态类型转换 ( 显式类型转换 ) ;

  • 静态类型转换 , 又称为 " 隐式类型转换 " , 在 编译器 编译时 进行类型转换 , 无需明确指定转换操作 , 自动地从一种类型转换为另一种类型 ; 如 : 函数传递时 , 接收 double 类型 , 传入 int 类型数据会自动转为 double 类型 ; 将 int 类型赋值给 float 变量 , 会被自动转为 float 类型 ;
代码语言:javascript
复制
    int a = 1;  
    float b = 2.5; 
    // 1. 静态类型转换 示例  
    // 计算时 a 变量会被转为 float 类型 , 与 b 进行加法计算
    float c = a + b; 
    // 输出 : 3.500000 
    printf("c = %f\n", c);
  • 动态类型转换 , 又称为 " 显式类型转换 / 强制类型转换 " , 开发者需要明确指定转换类型 , 该转换是在 程序运行时 进行的转换 ;
代码语言:javascript
复制
    int a = 1;  
    float b = 2.5; 
    // 2. 动态类型转换 示例  
    // float 类型 的 b 变量 被显式地转换为 int 类型
    int d = (int) b;
    // 输出 : 2
    printf("d = %d\n", d);

2、代码示例 - C 语言类型转换

代码示例 :

代码语言:javascript
复制
#include <stdio.h>  
  
int main() {  
    int a = 1;  
    float b = 2.5;  
  
    // 1. 静态类型转换 示例  
    // 计算时 a 变量会被转为 float 类型 , 与 b 进行加法计算
    float c = a + b; 
    // 输出 : 3.500000 
    printf("c = %f\n", c);
  
    // 2. 动态类型转换 示例  
    // float 类型 的 b 变量 被显式地转换为 int 类型
    int d = (int) b;
    // 输出 : 2
    printf("d = %d\n", d);
  
    return 0;  
}

执行结果 :

代码语言:javascript
复制
c = 3.500000
d = 2
在这里插入图片描述
在这里插入图片描述

二、C++ 类型转换


1、C++ 中 4 种类型转换操作符

C++ 中提供了 四种 类型转换操作符 :

  • 静态类型转换 static_cast : 在编译时进行 , 将一种数据类型安全地转换为另一种数据类型 , 转换前提是在编译时两个数据类型已知 ;
代码语言:javascript
复制
// 静态类型转换 整型 -> 浮点型
int num = 10;  
float fnum = static_cast<float>(num);  
  • 重新解释类型 reinterpret_cast : 对指针变量 , 引用变量进行原始的转换 , 即将地址值转成对应的类型 ;
代码语言:javascript
复制
// 重新解释类型 char* 指针类型 -> int* 指针类型
char* hello = "Hello";
//获取 hello 字符串地址 , 将其转为 int 类型
int hello_address = reinterpret_cast<int> (&hello);
  • 动态类型转换 dynamic_cast : 父类 ( 对象 / 指针 / 引用 ) 和 子类 ( 对象 / 指针 / 引用 ) 之间的转换 , 是 C++ 语言特有的 , C 语言中没有该转换类型 ;
  • 常量转换 const_cast : 只针对 C++ 常量 , 将 常量转为变量 或 将 变量转为常量 ;

2、C 语言和 C++ 常量原理本质

C 语言常量 和 C++ 常量原理 参考 【C++】C 语言 和 C++ 语言中 const 关键字分析 ( const 关键字左数右指原则 | C 语言中常量的原理和缺陷 | C++ 语言中常量原理 - 符号表存储常量 ) 博客 ;

  • C 语言常量 本质是 内存中的一块空间 , 可以通过 & 获取地址修改 ;
  • C++ 常量 本质是 创建了一个符号表区域 , 使用键值对形式存储常量值 ;

3、C 语言和 C++ 类型转换联系

C++ 中的 静态类型转换 static_cast 和 重新解释类型 reinterpret_cast 对应 C 语言中的 强制类型转换 ,

C++ 中的 动态类型转换 dynamic_cast 和 常量转换 const_cast 是 C++ 独有的 , 因为 C 语言中没有 子类父类 继承概念 , C++ 中的常量的本质 与 C 语言也是不同的 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、C 语言中的类型转换
    • 1、C 语言类型转换简介
      • 2、代码示例 - C 语言类型转换
      • 二、C++ 类型转换
        • 1、C++ 中 4 种类型转换操作符
          • 2、C 语言和 C++ 常量原理本质
            • 3、C 语言和 C++ 类型转换联系
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档