https://blog.csdn.net/bian_qing_quan11/article/details/70788312
一、变量初始化四种方式
int a=0;
int a(0);
int a={0};
int a{0};
后边两种属于列表初始化方式,不允许信息丢失,比如 double值初始化int变量
二、类型转换
C++ 四种强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast
static_cast 与 dynamic_cast:
前者提供的是编译时期的静态类型检测,后者提供的是运行时检测.
static_cast: 1)完成基础数据类型,2)同一个继承体系中类型的转换 3)任意类型与空指针类型void*之间的转换。
dynamic_cast:使用多态的场景,增加了一层对真实调用对象类型的检查
1、 static_cast:
功能:完成编译器认可的隐式类型转换。
格式type1 a;
type2 b = staic_cast<type1>(a);将type1的类型转化为type2的类型;
使用范围:
(1)基本数据类型之间的转换,如int->double;
int a = 6;
double b = static_cast<int>(a);
(2)派生体系中向上转型:将派生类指针或引用转化为基类指针或引用(向上转型);
2、 dynamic_cast
功能:执行派生类指针或引用与基类指针或引用之间的转换。
格式:
(1) 其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行运行时类型检查;
(2) 基类中要有虚函数,因为运行时类型检查的类型信息在虚函数表中,有虚函数才会有虚函数表;
(3) 可以实现向上转型和向下转型,前提是必须使用public或protected继承;
3、const_cast:
只能对指针或者引用去除或者添加const属性,对于变量直接类型不能使用const_cast;不能用于不同类型之间的转换,只能改变同种类型的const属性。
const_cast的用法:
(1)常用于函数的形参是一个非const的引用,我想要穿进去一个const的引用,可以使用const_cast<Type&>para;去除实参的常量性,以便函数能够接受这个参数。
(2)一个const对象,我们想要调用该对象中的非const函数,可以使用const_cast去除对象的常量性;
4、reinterpret_cast:
从字面意思理解是一个“重新解释的类型转换”。也就是说对任意两个类型之间的变量我们都可以个使用reinterpret_cast在他们之间相互转换,无视类型信息。
不常使用