隐式类型转换

类型转换

1.首先是最简单的类型转换

	int a = 3;
	double b = 3.14;
	int c = a + b;
  • 不同类型的变量不能想加,所以在计算c的时候,需要将最后的结果6.14转换成6,在这里就发生了隐式转换

2.隐式转换的时机

  • 在混合类型的表达式中,操作数转换成相同的类型
	int a;
	double b;
	a >= b;
  • 用作条件的表达式被转化为bool类型
	int val;
	if(val)
	while(val)
  • 用一表达式初始化某个变量,或者是赋值给某个变量
	int a = 3.14;
	int *p = 0;

另外,在函数调用中也可能会发生隐式类型转换,此处着重讨论的是变量。

3.算术转换

  • 找到类型中最宽的类型,并将所有的数据都转化成该类型
  • 最简单的转换就是整型提升
  • 关于有符号的无符号类型之间的转换,参考我的另一篇博客
  • https://blog.csdn.net/weixin_42873905/article/details/112545903

4.其他隐式转换
(1)指针转换
在使用数组的时候,大多数情况下都会自动转化为指向第一个元素的指针

	int arr[10];
	int *p = arr;
  • 其中,也有不将数组转化为指针的情况:数组用作取地址操作符、或者用作sizeof操作符的操作数、或者用数组对数组进行初始化,这些都不会将数组转化为指针
  • 还有另外两种指针转换,指向任意类型的指针都可以转换为void*类型、整型数值常量0可转化为任意的指针类型。
    (2)转化成bool类型
    (3)算术类型与bool类型的转换
    (4)转换与枚举类型
    (5)转换成const对象
  • 当使用非const对象初始化const对象的引用时,系统将非const对象转化为const对象
  • 还可以将非const对象的地址(或者是非const指针)转换为指向相关const类型的指针
	int i;
	const int ci = 0;
	const int &j = i;
	const int *p = &ci;

(6)由标准库类型定义的转换

在我们使用过的标准库类型中,有一个重要的类型转换:

	std::string s;
	while(std::cin >> s)
  • 这里隐式的使用了IO标准库定义的类型转换,将读取内容的类型转换成bool类型。

上述都是隐式转换的一些例子,显式转换包括static_cast、dynamic_cast、const_cast、reinterpret_cast,这四种转换的讲解在其他的博客中
地址:https://blog.csdn.net/weixin_42873905/article/details/106894914

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值