C++中的类型转换

一、概述

C++ 提供了多种类型转换(Type Conversion)方式,以便在不同类型的数据之间进行转换。类型转换主要分为 隐式转换 和 显式转换(即强制转换)。其中,显式转换包括 C 风格转换、static_cast、dynamic_cast、const_cast 和 reinterpret_cast。

二、隐式类型转换(Implicit Conversion)

隐式转换是由编译器自动执行的类型转换,通常发生在以下几种情况:

  • 基本类型转换:从低精度到高精度(如 int 转换为 double)。
  • 算术转换:运算时,较低精度的类型会被转换为较高精度的类型(如 char 转换为 int)。
  • 指针转换:int* 可以隐式转换为 void*,但 void* 不能隐式转换回 int*。派生类的指针可以隐式转换为基类指针(向上转型)。
  • 布尔转换:非零整数转换为 true,零转换为 false。
  • 非空指针转换为 true,空指针转换为 false。

示例:

int a = 10;
double b = a;  // int 自动转换为 double
void* ptr;
int* pInt = &a;
ptr = pInt;  // int* 隐式转换为 void*

三、显式类型转换(Explicit Conversion)

C++ 提供了多种强制转换方式,其中包括 C 风格转换和 C++ 提供的 static_cast、dynamic_cast、const_cast 和 reinterpret_cast。
C 语言中的类型转换使用 (type) 语法:

double d = 3.14;
int i = (int)d;  // C 风格转换

C 风格转换的缺点:

  • 不够安全,难以区分转换的类型。
  • 可能会绕过 C++ 类型检查,导致潜在错误。

四、C++ 风格类型转换

1. static_cast

  • 用途:用于相关类型之间的转换,如基本数据类型转换、类层次中的向上转换(派生类→基类指针/引用)、显式类型转换(无类型检查的向下转换)等。
  • 语法:static_cast<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值