目录
(3)const修饰指针指向对象的数值并且修饰指针(常量指针常量)
在C++中,我们经常使用到类型的转换,像把一个int类型转换成char类型,一个int类型转换成double类型,这些转换属于隐式类型转换。而今天我们要来讲的是显式类型转换。C++提供了四种显式类型转换,分别是:static_cast、dynamic_cast、const_cast、reinterpret_cast。
一、static_cast
static_cast的定义为:
static_cast<type_name>(expression)
type_name是转换的类型,expression是被转换的对象或者表达式。
static_cast一般用于隐式转换,当type_name和express至少有一方可以隐式转换时,则可以用static进行强制类型转换。可以用于常见的int、float、double等类型转换;转换成功返回true,否则返回false(相当于C语言中的强制类型转换)。
1、基本数据类型转换
double serven_double_1 = 1.2;
std::cout<<serven_double_1<<std::endl;
int serven_int_1 = static_cast<int>(serven_double_1);
std::cout<<serven_int_1<<std::endl;
double serven_double_2 = static_cast<double>(serven_int_1);
std::cout<<serven_double_2<<std::endl;
运行结果:基本类型的转换,可以看到double类型转换成int类型后丢失了精度,这一点跟reinterpret_cast不一样,reinterpret_cast是底层二进制的强制拷贝和语义转换,所以不会丢失精度,后面会讲到。
2、指针和void指针的转换
int* serven_int_2 = new int(2);
void * serven_void_1 = static_cast<void*>(serven_int_2);
int *serven_int_3 = static_cast<int*>(serven_void_1);
*serven_int_2 = 6;
std::cout<<*serven_int_2<<std::endl;
std::cout<<*serven_int_3<<std::endl;
std::cout<<serven_void_1<<std::endl;
std::cout<<serven_int_2<<std::endl;
std::cout<<serven_int_3<<std::endl;
运行结果:void指针和其他类型的指针进行转化的时候,他们都是指向同一个地址。
3、父类和子类之间的转换
class SERVEN_PARENT{
public:
SERVEN_PARENT(){}
void Function(){
std::cout<<"PARENT"<&l