隐式类型转换及explicit构造函数

C++语言中,某些类型之间有关联,即可以相互转换。这些类型转换有时是自动执行的,无须程序员的介入,有时甚至不需要程序要了解。被称为“隐式转换”。

在下面这些情况下,编译器会自动地转换运算对象的类型:

1.在大多数表达式中,比int类型小的整型值首先提升为较大的整数类型。

2.在条件中,非布尔值转换成布尔值。

3.初始化过程中,初始值转换成变量的类型;在赋值语句中,右侧运算对象转换成左侧运算对象的类型。

4.如果算术运算或关系运算的运算对象有多种类型,需要转换成同一种类型。

5.函数调用。

6.数组转化成指针。

7.指针的转换:常量整数值0或者字面值nullptr能转换成任意指针类型。指向任意非常量的指针能转换成void*;指向任意对象的指针能转换成const void*

8.转换成布尔类型:存在一种从算术类型或指针类型向布尔类型自动转换的机制。值为0转换成FALSE;否则转换成ture

9.转换成常量:允许将指向非常量类型的指针转换成指向相应的常量类型的指针,对于引用也是这样。

10.类类型定义的转换:如果构造函数只接受一个实参,则它实际上定义了转换为此类型的隐式转换机制,有时我们把这种构造函数称作转换构造函数。在要求隐式转换的程序上下文中,我们可以通过将构造函数声明为explicit加以阻止。被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎,因为它们禁止编译器执行非预期的类型转换。除非我有一个好理由允许构造函数被用于隐式类型转换,否则应该把它声明为explicit

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值