一、静态类型转换 static_cast
1、C 静态类型转换 static_cast
C 中的 static_cast 静态类型转换 , 是使用频率最高的 类型转换 操作符 ,
使用 该 静态类型转换 时 , 在编译器进行静态编译时 , C 编译器会进行 类型检查 , 如果 出现类型错误 , 编译时会进行提示报错 ;
与之相对的事 , C 语言中如果可以进行隐式类型转换 , 如果使用 C 的静态类型转换 , 在 C 编译器 编译时会进行类型检查 , 如果有错编译不通过 , 这样不容易出错 ;
C 静态类型转换示例 :
代码语言:javascript复制 double pi = 3.14;
// C 中的 静态类型转换
// 静态编译时 , C 编译器会进行 类型检查
// C 语言中如果可以进行隐式类型转换 , 如果使用 C 的静态类型转换
// 此时在 C 编译器 编译时会进行类型检查 , 如果有错编译不通过 , 这样不容易出错
int num3 = static_cast<int> (pi);
2、C 语言隐式转换弊端
使用 C 静态类型转换 static_cast 可以避免 C 语言 隐式转换的 弊端 ;
使用 C 语言的 隐式 强制类型转换 ,
代码语言:javascript复制 // C 语言中 隐式类型转换 赋值时自动转换
int num = pi;
在 编译器 编译时 , 会报如下警告 ,
代码语言:javascript复制严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C4244 “初始化”: 从“double”转换到“int”,可能丢失数据 HelloWorld Y: 02_WorkSpace 02_VSHelloWorldHelloWorldTest.cpp 9
使用 C 语言 的 显示类型转换 手动强制转换 , 和 使用 C 的 静态类型转换 , 不会出现警告 ;
3、代码示例
代码示例 :
代码语言:javascript复制#include "iostream"
using namespace std;
int main() {
double pi = 3.14;
/*
I. C 语言类型转换
*/
// C 语言中 隐式类型转换 赋值时自动转换
int num = pi;
// C 语言中 显示类型转换 手动强制转换
int num2 = (int)pi;
/*
II. C 类型转换
*/
// C 中的 静态类型转换
// 静态编译时 , C 编译器会进行 类型检查
// C 语言中如果可以进行隐式类型转换 , 如果使用 C 的静态类型转换
// 此时在 C 编译器 编译时会进行类型检查 , 如果有错编译不通过 , 这样不容易出错
int num3 = static_cast<int> (pi);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
代码语言:javascript复制请按任意键继续. . .