深入解析C++中的动态类型转换与静态类型转换运算符

2020-01-06 14:20:39刘景俊

因此,static_cast 可以反向执行隐式转换,而在这种情况下结果是不确定的。这需要程序员来验证 static_cast 转换的结果是否安全。
该行为也适用于类以外的类型。例如,static_cast 可用于将 int 转换为 char。但是,得到的 char 可能没有足够的位来保存整个 int 值。同样,这需要程序员来验证 static_cast 转换的结果是否安全。
static_cast 运算符还可用于执行任何隐式转换,包括标准转换和用户定义的转换。例如:


// static_cast_Operator_3.cpp
// compile with: /LD /GR
typedef unsigned char BYTE;

void f() {
  char ch;
  int i = 65;
  float f = 2.5;
  double dbl;

  ch = static_cast<char>(i);  // int to char
  dbl = static_cast<double>(f);  // float to double
  i = static_cast<BYTE>(ch);
}

static_cast 运算符可以将整数值显式转换为枚举类型。如果整型值不在枚举值的范围内,生成的枚举值是不确定的。
static_cast 运算符将 null 指针值转换为目标类型的 null 指针值。
任何表达式都可以通过 static_cast 运算符显式转换为 void 类型。目标 void 类型可以选择性地包含 const、volatile 或 __unaligned 特性。
static_cast 运算符无法转换掉 const、volatile 或 __unaligned 特性。



注:相关教程知识阅读请移步到C++教程频道。