C++ 类型转换机制深度解析
在 C 语言中,类型转换主要依靠隐式转换和显式的强制转换。虽然简单,但容易引发精度丢失或安全隐患。C++ 为了增强类型安全,引入了四种新的类型转换操作符:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。本文将深入探讨这些转换的区别、适用场景及潜在风险。
C 语言中的类型转换
隐式类型转换
隐式转换由编译器自动完成,通常发生在赋值、函数参数传递等场景中。例如浮点数与整数之间的转换。对于单参数构造函数,C++ 也支持隐式转换,但这可能导致意外的对象创建。
#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, _c;
};
int main() {
// 基本类型隐式转换
int a = 0;
double b = a;
// 单参数构造函数隐式转换
A aa = 1;
// C++11 初始化列表支持的多参数隐式转换
B bb = {2, 3};
return 0;
}
如果希望阻止这种隐式构造,可以使用 explicit 关键字修饰构造函数。
class A {
public:
explicit A : _a(a) {}
:
_a;
};


