C++ cast 类型转换
你还在用 int a = (int)b
这种类型转换吗?你还在用 double c = (double)a / b
这种类型转换吗?你还在用 char d = (char)c
这种类型转换吗?
不是哥们,都4202年了,都用 C++ 了,别再用 C 的了。
C++中的类型转换(Casting)
类型转换是指将一种数据类型转换为另一种数据类型。C++提供了四种类型转换操作符,用于不同类型间的转换。它们分别是static_cast
、dynamic_cast
、const_cast
和reinterpret_cast
。
static_cast
-
进行基本数据类型之间的转换,例如 int 转换为 float
-
在类层次结构中进行向上转换(如将子类指针转换为基类指针),以及必要的向下转换(需保证安全性)
这个一般不怎么用
dynamic_cast
-
主要用于在运行时进行类型安全的向下转换 (子->父) ,特别是在多态类型间的转换。dynamic_cast只能用于包含虚函数的基类,因此它通常用于有多态行为的类层级中。
-
可转换指针和引用(指针成功转换返回指向目标类型的指针,失败返回nullptr;引用转换失败会抛出std::bad_cast异常)。
const_cast
- 用于移除或增加const属性。
这个就很像那种黑客黑的办法,对于一块private或者static的不可变不可访问的变量进行修改。
reinterpret_cast
- 用于在不同类型间做任意的 reinterpret_cast,包括指针和整数之间的转换。一般都是低级别的位模式转换。