一、回顾 C 语言的类型转换
C 语言的类型转换主要是隐式类型转换和强制类型转换:
- 隐式类型转换,是编译器在特定情况下自动进行的类型转换,通常发生在不同类型的表达式运算中。主要是整型之间、整型与浮点型之间、浮点型之间的转换。
int a = 1;
double b = 2.234;
a = b;
- 强制类型转换:是我们通过显式语法手动指定的类型转换,主要是整型和指针、指针和指针之间的转换。
int a = 1;
char* p = (char*)a;
int* p1 = (int*)malloc(sizeof(int));
但是,并非所有类型直接都能转换。例如 double 就无法转为指针类型。

二、C++中的类型转换
1. 内置类型转为自定义类型
随着自定义类型的广泛使用,C++也支持了内置类型和自定义类型之间的相互转换:
- 内置类型转换为自定义类型,需要自定义类型的相关构造函数支持。非常好理解,用内置类型转换为自定义对象,就相当于构造一个自定义对象。
class A {
public:
A(int a) : a1(a), a2(a) {}
private:
int a1;
int a2;
};

而当构造函数前加上关键字 explicit,可以使这个构造函数不支持隐式类型转换。这就是之前我们学习智能指针时构造函数加了它的原因,我们不希望一个普通指针悄悄转换为智能指针。不过,还是支持强制类型转换的:







