C++ 静态#u cast运算符及其'的实现;s极限

C++ 静态#u cast运算符及其'的实现;s极限,c++,static-cast,C++,Static Cast,请告诉我为什么编译器不允许这种类型转换…编译器显示的错误是“从float*到int*的静态转换无效” #包括 使用名称空间std; int main() { 浮点数f=45.678; 浮动*a; a=&f; int*d; coutstatic_cast是一种强制转换,用于在编译时检查强制转换是否合法 考虑以下cast合法的例子: 将较小大小的有符号/无符号整数类型强制转换为较大大小的有符号/无符号整数类型 将指向派生类的指针向上转换为指向基类的指针 等等 从编译器的角度来看,将float*强

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

#包括
使用名称空间std;
int main()
{
浮点数f=45.678;
浮动*a;
a=&f;
int*d;

cout
static_cast
是一种强制转换,用于在编译时检查强制转换是否合法

考虑以下cast合法的例子:

  • 将较小大小的有符号/无符号整数类型强制转换为较大大小的有符号/无符号整数类型
  • 将指向派生类的指针向上转换为指向基类的指针
  • 等等

从编译器的角度来看,将
float*
强制转换为
int*
是没有意义的。如果你想进行这样的转换,你应该使用
reinterpret\u cast

它为什么允许强制转换的可能副本?因为强制转换是为了允许不同数据类型之间的转换…@christian hacklneed possib更简单更深入的解释@scis@virusai:C++风格的强制转换被明确设计为只允许某些类型的强制转换。这是它们的优点之一;与C风格的强制转换不同,它们可以防止意外强制转换和静默错误。Scis链接的答案有什么问题?
#include<iostream>
using namespace std;
int main()
{
   float f=45.678;
   float *a;
   a=&f;
   int *d;
   cout<<static_cast<int *>(a);
}