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

2023-11-27 10:20:50 浏览数 (3)

一、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 = %fn", c);
  • 动态类型转换 , 又称为 " 显式类型转换 / 强制类型转换 " , 开发者需要明确指定转换类型 , 该转换是在 程序运行时 进行的转换 ;
代码语言:javascript复制
    int a = 1;  
    float b = 2.5; 
    // 2. 动态类型转换 示例  
    // float 类型 的 b 变量 被显式地转换为 int 类型
    int d = (int) b;
    // 输出 : 2
    printf("d = %dn", 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 = %fn", c);
  
    // 2. 动态类型转换 示例  
    // float 类型 的 b 变量 被显式地转换为 int 类型
    int d = (int) b;
    // 输出 : 2
    printf("d = %dn", 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 语言也是不同的 ;

1 人点赞