static_cast 在编译时使用类型信息执行转换, 在转换执行必要的检测(诸如指针越界计算, 类型检查). 其操作数相对是安全的.
功能与(int)等强制转换类似。但是多了一些必要的检查机制。
int a = 1;
void *p = &a;
cout<<*(int*)p;
cout<<*static_cast
效果相同。
但是如果是
cout<<*static_cast
就会报错。
但是double a = 1.2;
再如上面,都会正确。
因为double 可以转int只是有误差而已。
语法还是正确的。
C++中类型转换符中的一个,用于执行int 到 double之间的转换,但没有运行时类型检查来保证转换的安全性.在功能上基本上与C风格的类型转换一样强大,含义也一样。它也有功能上限制。例如,你不能用static_cast象用C风格的类型转换一样把struct转换成int类型或者把double类型转换成指针类型,另外,static_cast不能从表达式中去除const属性,因为另一个新的类型转换操作符const_cast有这样的功能。
静态转换,效果和C的转换还有C++的函数式转换相同,如:
int a = 1;
void *p = &a;
int *p1 = (int*)p;
int *p2 = int*(p);
int *p3 = static_cast
效果相同。