C++里那只无形的手
在编程过程中我们总是能遇到一些莫名奇妙的问题,先来看个有趣的列子。
大家可以想想结果是什么?为什么会这样呢,就是因为byte类型是8位,最大数位256了,超了之后就从头再来。c++是一个对数据类型有着非常严格检查的语言。在进行操作过程中要时刻牢记,数据在干什么,调用谁的操作符。那些地方会进行隐式的转换呢?最多的就是在传值过程中,通常我们将短数据类型转换为长数据类型没有问题,不足位填充0就可以了。那长数据转换为段数据类型只能忍痛割爱将超出部分拿掉。这就是数据切片,我们在c++里,时时刻刻都在创造新的数据类型,在我们传值,转换过程中一定要注意。当然了传递指针问题不大。
今天主要说说数据对象操作的隐式转换问题,在下面的代码里我重载了操作符*。首先这个类的对象相互调用对于乘法交换律没有什么问题了。可是和一个整形可以吗?注释的最后一行就是问题行。为什么第一行可以,下面一行不行呢。让我们来分析第一行的过程。
相当于上面这样的操作,所以可以正常编译通过,而下面一行就是直接调用int的*操作符,自然编译器是不能通过的。在这里要牢记,编译器可以隐式的转换参数表里列出的参数,而不会对成员变量进行隐式的转换。