C++进阶——浅谈隐式转化

在代码里我们或多或少都会依赖c++的隐式类型转换。

然而不幸的是隐式类型转换也是c++的一大坑点,稍不注意很容易写出各种奇妙的bug。

因此我梳理一遍c++的隐式类型转换

一、什么是隐式类型转换

概念:就是当你只有一个类型T1,但是当前表达式需要类型为T2的值,如果这时候T1自动转换为了T2,那么这就是隐式类型转换。

接下来看两个例子,首先是最常见的混用数值类型

int a = 0;
long b = a + 1; // int 转换为 long
if(a == b)
{
    // 默认的operator==需要a的类型和b相同,因此也发生转换
}

int转成long是向上转换,通常不会有太大问题,而long到int则很可能导致数据丢失,因此要尽量避免后者。

第二个例子是自定义类型到标量类型的转换

std::shared_ptr<int> ptr = func();
if(ptr) // 这里会从shared_ptr转换成bool
{ 
    // 处理数据
}

因为提供了用户自定义的隐式类型转换规则,所以我们可以很简单地去判断智能指针是否为空。在这里if表达式里需要bool,因此ptr转换为了bool,这又被叫做语境转换。

由此可见隐式类型转换转换可以简化代码的书写。不过简化不是没有代价的,我们细细说来。

二、基础回顾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值