part-02 C++知识总结(类型转换)
一.C++常用的类型转换函数
在C++中,有几种自带的类型转换函数可以用于不同类型之间的转换。以下是其中一些常用的自带类型转换函数:
1.隐式转换(Implicit Conversion)
数字类型之间的隐式转换,例如将int
转换为float
、double
等。
派生类指针向基类指针的隐式转换。
2.显式转换(Explicit Conversion)
C风格的强制类型转换:使用(type)value
,例如(int)3.14
将浮点数转换为整数。
函数样式的强制类型转换:使用type(value)
,例如int(3.14)
也可以将浮点数转换为整数。
3.const_cast:用于去除const和volatile属性。
const_cast<type>(expression)
,例如const_cast<int*>(ptr)
可以去除指针ptr
的const属性。
4.static_cast:用于静态类型转换(大多数常见的转换操作都可以使用static_cast完成)。
static_cast的语法:
static_cast<目标类型>(表达式)
1.基本数据类型之间的转换
int a = 42;
double b = static_cast<double>(a);
2.子类指针向基类指针的转换
class A{
}
class B:public:A{
}B*b=new B();
A*a=static_cast<A*>(b);
注意:这种转换只在派生类转换到基类中有效
3.空指针的类型转换
int* ptr = static_cast<int*>(nullptr);
尽管nullptr
本身就是空指针的字面值,但在某些上下文中,编译器可能无法推断出需要的指针类型。因此,通过使用static_cast
进行强制转换,可以明确告诉编译器将nullptr
转换为int*
类型的指针。
这通常在以下情况下使用:
- 当需要将一个空指针赋值给一个特定类型的指针变量时,例如在初始化指针或进行复制/赋值操作时。
- 当调用期望接受特定类型指针参数的函数时,可以将
nullptr
转换为该类型的指针并传递给函数。
需要注意的是,在使用static_cast
将nullptr
转换为指针类型时,请确保目标指针类型是有效的,并且可以安全地使用它来执行后续操作,以避免未定义行为。
4.强制转换为枚举类型
enum class Color {RED,GREEN,BLUE
};
int value = 1;
Color color = static_cast<Color>(value);
这里将 int 类型的 value 转换成了 枚举类型Color。
5.dynamic_cast:用于在继承层次结构中进行安全的向下转型。
dynamic_cast<type>(expression)
,例如dynamic_cast<Derived*>(basePtr)
将基类指针basePtr
转换为派生类指针。
6.reinterpret_cast:用于进行不相关类型之间的转换,通常用于将指针或引用重新解释为其他类型。
reinterpret_cast<type>(expression)
,例如reinterpret_cast<int*>(ptr)
将指针ptr
转换为整型指针。
需要注意的是,在使用类型转换函数时要小心潜在的风险和副作用。应确保转换操作是安全和合理的,并避免滥用类型转换。