C++ 类型转换机制深度解析
在 C 语言中,类型转换主要依赖隐式规则和显式的强制转换。虽然 C++ 兼容 C 的转换方式,但为了增强类型安全,C++ 引入了四种显式的类型转换操作符。理解它们的区别和使用场景,是编写健壮 C++ 代码的关键。
C 语言中的类型转换回顾
隐式类型转换
隐式转换发生在赋值、函数参数传递等场景中。编译器会自动处理相近类型的转换,例如整型转浮点型。对于单参数构造函数,C++11 之前支持隐式转换,之后通过 explicit 关键字可以禁止这种转换。
#include <iostream>
using namespace std;
class A {
public:
explicit A(int a) : _a(a) {}
private:
int _a;
};
class B {
public:
explicit B(int b, int c) : _b(b), _c(c) {}
private:
int _b;
int _c;
};
int main() {
// 隐式类型转换示例
int a = 0;
double b = a; // 整型转浮点型
// explicit 阻止了以下转换
// A aa = 1;
// B bb = {2, 3};
return 0;
}
强制类型转换
C 风格的强制转换 (type)value 允许将指针与整数互转,因为本质上它们都是数值地址。但这并不适用于完全不相关的类型,如 string 和 vector,强行转换会导致编译错误。
{
a = ;
* pa = ;
pa = (*)a;
;
}


