static_cast比较接近于C语言中的强制转换,多用于不同的基本数据类型的转换:
char c1 = 0;
int i = static_cast<int>(c1);
char c2 = static_cast<char>(i);
他可以将空指针转换为目标类型的指针,或反之:
int i =0;
int *pa = &i;
void *pv = static_cast<void*>(pa);
int *pi = static_cast<int*>(pv);
但不能对不同类型的指针进行转换:
int i =0;
int *pa = &i;
char *pc = static_cast<char*>(pa); //编译报错:invalid static_cast from type 'int*' to type 'char*
long *pl = static_cast<long*>(pa); //编译报错:invalid static_cast from type 'int*' to type 'long int*'
更不能将整数转换为指针或反之:
int i =0;
int *pa = &i;
char *pc = static_cast<char*>(i); //编译报错:invalid static_cast from type 'int&#