【C++】类型转换 ② ( C++ 静态类型转换 static_cast | C 语言隐式转换弊端 | 代码示例 )

2023-11-27 10:22:06 浏览数 (3)

一、静态类型转换 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_WorkSpace02_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复制
请按任意键继续. . .

1 人点赞