static_cast运算符的实现及其限制

时间:2015-03-01 12:55:26

标签: c++ static-cast

请告诉我为什么编译器不允许这种类型转换...错误编译器显示的是“从float *到int *的无效static_cast”

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

1 个答案:

答案 0 :(得分:1)

static_cast是一个演员,它会在演员表合法的情况下进行编译时检查。

请考虑以下关于何时合法投票的示例:

  • 使用
  • 将较小尺寸的有符号/无符号整数类型转换为更大尺寸的有符号/无符号整数类型
  • 将指向派生类的指针向上转换为指向基类的指针。
  • 等等。

从编译器的角度来看,float*int*的转换是没有意义的。如果您想进行此类转换,则应使用reinterpret_cast