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
.
请问为什么编译器不允许这种类型转换...错误编译器显示为“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
.