0

当我们编写 statemnets 时会发生什么,比如 B 是 C++ 中派生 D1 的类 是否创建了实际的新对象,或者只是完成了像原始类型这样的简单类型转换

    D1 d1;
    (B)d1;
4

2 回答 2

1

类型转换不会创建新对象,但是知道这两种类型的编译器可以应用所需的偏移量来将对象解释为类型转换的对象。当然编译器或运行时会确保强制转换是合法的。

在您的特定情况下,如果您将派生对象转换为基类,则称为“切片”,派生部分会从基对象中截断。为了直观地理解这一点,假设 d1 有一个内存区域来保存所有这些成员,因为它从 B 派生,它将有一个子区域来保存它的基类版本。当您将 d1 转换为基类时,您必须确保变量仅引用子区域并忽略它的其余部分,换句话说,对象边界停止在基类部分。

于 2013-10-19T18:08:44.770 回答
0

转换类型永远不会创建它们的新实例,而是提供转换实例的“视图”,就好像它是您要转换的类型一样。

static_cast将在编译时检查类型是否可转换。
dynamic_cast将在运行时检查类型是否可转换。
reinterpret_cast只是在编译或运行时进行强制转换而不进行任何检查。

于 2013-10-19T18:03:44.393 回答