C++的4个强制类型转换,事实上那个返回值,对内存造成了变化了吗

C++的4个强制类型转换,事实上那个返回值,对内存造成了变化了吗?举个例子:
class a
class b:public a
b test=(b)new a
这是不倡导的行为,但是,子类指针指向强制类型转换之后的父类对象,b指针竟然可以可以调用b自身的方法和属性,只不过并没有执行自己的构造函数罢了,想究其原因,望大神赐教,文不对题的就不要参与了,
谢谢

https://blog.csdn.net/qq_33366098/article/details/78137422

const_cast
  去掉类型的const或volatile属性。

static_cast
  类似于C风格的强制转换。无条件转换,静态类型转换。用于:
  1. 基类和子类之间转换:其中子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的。(基类和子类之间的动态类型转换建议用dynamic_cast)
  2. 基本数据类型转换。enum, struct, int, char, float等。static_cast不能进行无关类型(如非基类和子类)指针之间的转换。
  3. 把空指针转换成目标类型的空指针。
  4. 把任何类型的表达式转换成void类型。
  5. static_cast不能去掉类型的const、volitale属性(用const_cast)。

dynamic_cast

  有条件转换,动态类型转换,运行时类型安全检查(转换失败返回NULL):
  1. 安全的基类和子类之间转换。
  2. 必须要有虚函数。
  3. 相同基类不同子类之间的交叉转换。但结果是NULL。

reinterpreter_cast
  仅仅重新解释类型,但没有进行二进制的转换:
  1. 转换的类型必须是一个指针、引用、算术类型、函数指针或者成员指针。
  2. 在比特位级别上进行转换。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。但不能将非32bit的实例转成指针。
  3. 最普通的用途就是在函数指针类型之间进行转换。
  4. 很难保证移植性。

总 结
  去const属性用const_cast。
  基本类型转换用static_cast。
  多态类之间的类型转换用daynamic_cast。
  不同类型的指针类型转换用reinterpreter_cast。

去const属性用const_cast。
  基本类型转换用static_cast。
  多态类之间的类型转换用daynamic_cast。
  不同类型的指针类型转换用reinterpreter_cast。

不同类型的变量在内存中有不同的存储方式和不同长度,强制转型前后有什么不同都要转换过来。例如int y=3;char x=(char)y;,他们只是长短不同,就把y的高3字节全截掉,只把最低一个字节赋给了x;反过来,若char y=3;int x=(int)y;,那么,将把高3字节全用0补齐。若是浮点数与整型数强制转型,不仅存储长度发生了变化,而且存储方式也发生了变化:整数用补码表示,而浮点数用阶码+原码表示,都要一一转换过来。还有指针变量,转换也较复杂。强制转型时为目标类型设置一个临时变量,轮换后就用这个临时变量操作,一旦操作结束,临时变量也消失了,整个过程是由编译器编译时安排好了的。

daynamic_cast。

我理解任何内存转换都不会改变内存本身的内容。还是那一块内存。只不是你怎么取解读,理解这块内存。如果不符合你期望的解读。说明不能进行这样的内存转换。