前言
本文主要介绍 C++ 中的四种类型转换操作符。
一、C 语言中的类型转换
在 C 语言中,如果赋值运算符左右两侧类型不匹配,形参和实参的类型不匹配,返回值类型和接收返回值的类型不匹配就会发生类型转换。C 语言中共有两种类型转换:隐式类型转换和显示的强制类型转换。
隐式类型转换
- 隐式类型转换:隐式类型转换会产生临时变量,编译器在编译阶段进行,如果转换失败,则编译失败。可以隐式转换极为相近的类型,比如浮点数和整形进行转换。对于单参数的构造函数也支持隐式类型转换,C++11 中也支持了多参数的隐式类型转换。
#include <iostream>
using namespace std;
class A {
public:
A(int a) : _a(a) {}
private:
int _a;
};
class B {
public:
B(int b, int c) : _b(b), _c(c) {}
private:
int _b;
int _c;
};
int main() {
// 隐式类型转换
int a = 0;
double b = a;
// 单参数的构造函数可以进行隐式类型转换
A aa = 1;
// C++11 中多参数的构造函数也可以进行隐式类型转换
B bb = {2, 3};
return 0;
}
运行结果无报错成功。
- 当然如果我们在类中不想要类型转换发生,可以使用 explicit 修饰对应成员函数即可限制类型转换。
#include <iostream>
using namespace std;
{
:
}
:
_a;
};
{
:
}
:
_b;
_c;
};
{
a = ;
b = a;
A aa = ;
B bb = {, };
;
}


