static_cast 运算符的实现及其限制

Implementation of static_cast operator and it's limits

请问为什么编译器不允许这种类型转换...错误编译器显示为“Invalid static_cast from float * to int *”

#include<iostream>
using namespace std;
int main()
{
   float f=45.678;
   float *a;
   a=&f;
   int *d;
   cout<<static_cast<int *>(a);
}

static_cast 是一个强制转换,它会在编译时检查强制转换是否合法。

考虑以下强制转换何时合法的示例:

  • 将较小的 signed/unsigned 整数类型转换为较大的 signed/unsigned 整数类型
  • 将指向派生 class 的指针向上转换为指向基 class 的指针。
  • 等等。

从编译器的角度来看,将 float* 转换为 int* 没有任何意义。如果你想做这样的转换,你应该使用 reinterpret_cast.