文章目录
- 一、静态类型转换 static_cast
- 1、C++ 静态类型转换 static_cast
- 2、C 语言隐式转换弊端
- 3、代码示例
在之前写过一篇 C++ 类型转换的博客 【C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 ) , 简单介绍了 C++ 类型转换 ;
在 博客 【C++】类型转换 ① ( C 中的类型转换 | C++ 类型转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast ) 将 C 语言 和 C++ 中的类型转换进行了对比 ;
一、静态类型转换 static_cast
1、C++ 静态类型转换 static_cast
C++ 中的 static_cast 静态类型转换 , 是使用频率最高的 类型转换 操作符 ,
使用 该 静态类型转换 时 , 在编译器进行静态编译时 , C++ 编译器会进行 类型检查 , 如果 出现类型错误 , 编译时会进行提示报错 ;
与之相对的事 , C 语言中如果可以进行隐式类型转换 , 如果使用 C++ 的静态类型转换 , 在 C++ 编译器 编译时会进行类型检查 , 如果有错编译不通过 , 这样不容易出错 ;
C++ 静态类型转换示例 :
double pi = 3.14;
// C++ 中的 静态类型转换
// 静态编译时 , C++ 编译器会进行 类型检查
// C 语言中如果可以进行隐式类型转换 , 如果使用 C++ 的静态类型转换
// 此时在 C++ 编译器 编译时会进行类型检查 , 如果有错编译不通过 , 这样不容易出错
int num3 = static_cast<int> (pi);
2、C 语言隐式转换弊端
使用 C++ 静态类型转换 static_cast 可以避免 C 语言 隐式转换的 弊端 ;
使用 C 语言的 隐式 强制类型转换 ,
// C 语言中 隐式类型转换 赋值时自动转换
int num = pi;
在 编译器 编译时 , 会报如下警告 ,
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C4244 “初始化”: 从“double”转换到“int”,可能丢失数据 HelloWorld Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Test.cpp 9
使用 C 语言 的 显示类型转换 手动强制转换 , 和 使用 C++ 的 静态类型转换 , 不会出现警告 ;
3、代码示例
代码示例 :
#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;
};
执行结果 :
请按任意键继续. . .