1. 隐式类型转换
#include <stdio.h>
int main(int argc, char **argv)
{
double d = 100.1;
int i = d; // doublezh 2 int
char *str = "100ask.taobao.com";
int *p = str; // char * 2 int *
printf("i = %d, str = 0x%x, p = 0x%x\n", i, str, p);
return 0;
}
2. 显式类型转换
#include <stdio.h>
int main(int argc, char **argv)
{
double d = 100.1;
int i = d; // double 2 int
char *str = "100ask.taobao.com";
int *p = (int *)str; // char * 2 int *
printf("i = %d, str = 0x%x, p = 0x%x\n", i, (unsigned int)str, (unsigned int)p);
return 0;
}
3. reinterpret_cast < type-id >(expression) 相当于 C风格的用(type-id)实现的强制类型转换,
注意:其不能把原有的 const 只读属性转换成可读可写属性
(expression) 表明为函数,expression是参数
reinterpret_cast < type-id > 表明为模版函数
#include <stdio.h>
int main(int argc, char **argv)
{
double d = 100.1;
int i = d; // double 2 int
char *str = "100ask.taobao.com";
int *p = reinterpret_cast<int *>(str); // char * 2 int *
printf("i = %d, str = 0x%x, p = 0x%x\n", i, reinterpret_cast<unsigned int>(str), reinterpret_cast<unsigned int>(p));
return 0;
}
4. const_cast 能把原有的 const 只读属性转换成可读可写属性
#include <stdio.h>
int main(int argc, char **argv)
{
double d = 100.1;
int i = d; // doubleתΪint
const char *str = "100ask.taobao.com";
char *str2 = const_cast<char *>(str);
int *p = reinterpret_cast<int *>(str2); // char *תΪint *
printf("i = %d, str = 0x%x, p = 0x%x\n", i, reinterpret_cast<unsigned int>(str), reinterpret_cast<unsigned int>(p));
return 0;
}