C++图文并茂讲解类型转换函数
一、类型转换函数(上)
1.再论类型转换
标准数据类型之间会进行隐式的类型安全转换
转换规则如下:

下面来看一个有趣的隐式类型转换:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
输出结果如下:

ui 为 unsigned int 类型,i 为 int 类型,将两者进行相加编译器会进行隐式的类型转换,全部变成unsigned int 类型,所以最后的运行结果是正数。
s 和 'b 编译器都被编译器转换成 int 类型,因为 int 类型的运算是最高效的。
2.问题
普通类型与类类型之间能否进行类型转换?类类型之间能否进行类型转换?
3.再论构造函数
构造函数可以定义不同类型的参数
参数满足下列条件时称为转换构造函数
- 有且仅有一个参数
- 参数是基本类型
- 参数是其它类类型
4.另一个视角
旧式的 C 方式强制类型转换

5.编译器的行为
编译器会尽力尝试让源码通过编译

编译器尽力尝试的结果是隐式类型转换
隐式类型转换
会让程序以意想不到的方式进行工作
是工程中 bug 的重要来源
工程中通过 explicit 关键字杜绝编译器的转换尝试
转换构造函数被 explicit 修饰时只能进行显示转换
转换方式

下面来看一个普通类型向类类型的转换:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
输出结果如下:

6.小结(上)
- 转换构造函数只有一个参数
- 转换构造函数的参数类型是其它类型
- 转换构造函数在类型转换时被调用
- 隐式类型转换是工程中 bug 的重要来源
- explicit关键字用于杜绝隐式类型转换
二、类型转换函数(下)
1.类型转换
类类型是否能够类型转换到普通类型?
C++ 类中可以定义类型转换函数
类型转换函数用于将类对象转换为其它类型
语法规则:

下面来看一个类型转换函数:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|

int i = t; 等价于int i = t.operator int ();
类型转换函数
- 与转换构造函数具有同等的地位
- 使得编译器有能力将对象转化为其它类型
- 编译器能够隐式的使用类型转换函数
2.编译器的行为
编译器会尽力尝试让源码通过编译

3.注意事项
- 无法抑制隐式的类型转换函数调用
- 类型转换函数可能与转换构造函数冲突
- 工程中以 Type toType() 的公有成员代替类型转换函数
更多推荐



所有评论(0)