C++类型转换
2024-04-03 15:14:32 # 技术

类型转换

类型转换是指将一种类型的值转换为另一种类型的值。C++中有两种形式的类型转换:显式类型转换隐式类型转换

隐式类型转换

隐式类型转换发生在以下几种情况:

  • 混合运算:级别低的类型向级别高的类型转换。(一般来说,某个类型的一个数据占用的存储空间越多,则该类型的级别越高)
  • 将表达式的值赋给变量:表达式的值向变量类型的值转换。
  • 函数实参向函数形参传值:实参的值向形参的值转换。
  • 函数返回结果:返回的值向函数返回类型的值进行转换。

需要注意的是,隐式转换是在编译时进行的,因此不需要运算符的参与。

显式类型转换

显示类型转换有下面几种风格:

  1. C风格:(类型名)表达式(类型名)(表达式);
  2. C++风格:类型名(表达式)。此时,类型名就是一个类型转换运算符
  3. 类型安全的显式类型转换运算符
    1. static_cast<类型名>(表达式):作用类似于C风格和C++风格的转换功能,同时也能用在不需要显式转换的地方。
    2. const_cast<类型名>(表达式):将const或volaile数据转换为非const或非volatile的数据。
    3. dynamic_cast<类型名>(表达式):将父类指针转换为子类指针。
    4. reinterpret_cast<类型名>(表达式):将一个数据转换成一个完全不同意义的数据,在使用时一般要在这样的转换后再做逆转换。(这是一种具有潜在危险性的转换)

需要注意的是,无论是哪种类型转换,都需要申请一个临时单元,将要转换的值先复制到临时单元,转换发生在临时单元中。