1、static_cast

支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持,但会给出编译警告,它作用最类似C风格的“强制转换”,一般来说可认为它是安全的;

除了不能转换底层const ,其他都行。一般情况下的强制类型转化都用这个。

2、dynamic_cast

支持子类指针到父类指针的转换,并根据实际情况调整指针的值,和static_cast不同,反过来它就不支持了,会导致编译错误,这种转换是最安全的转换;

3、reinterpret_cast

支持任何转换,但仅仅是如它的名字所描述的那样“重解释”而已,不会对指针的值进行任何调整,用它完全可以做到“指鹿为马”,但很明显,它是最不安全的转换,
使用它的时候,你得头脑清醒,知道自己在干什么;

4、const_cast

这个转换能剥离一个对象的const属性,也就是说允许你对常变量进行修改。

只能改变底层const,通过这个函数,可以解除只读对象的只读特性。从而可以写只读 变量。

顶层const:const指针,则const为顶层const;

底层const:指针指向的是const变量,则const为底层const。

官方说明:在包含 const_cast 的行中,this 指针的数据类型为 const CCTest *。 const_cast 运算符会将 this 指针的数据类型更改为 CCTest *,以允许修改成员 number。 强制转换仅对其所在的语句中的其余部分持续。