关于C++中类型一致性的问题?

ipk*_*iss 5 c++ types

我正在阅读一些C++文本并获得以下代码:

class A { };
class B : public A { };

void main() {
   A* p1 = new B; // B may be larger than A :OK [Line 1]
   B* p2 = new A; // B may be larger than A :Not OK [Line 2]
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 我不明白作者在第1行和第2行的评论意味着什么
  2. 为什么我们不能在2号线做?

sha*_*oth 8

那么,"更大"不是关键.真正的问题是"是一种"关系.

任何对象class B也是类型class A(class B也是class A由于继承),所以第一行是可以的(指针也class A可以指向一个对象class B),但反之不是真的(class A不是class B甚至可能没有)class B存在的想法),所以第二行不会编译.


Jam*_*nze 7

作者向您展示他不了解C++(或一般的编程).没有涉及尺寸("更大")的问题.问题是B"isA" A,所以指针A可以用指针初始化B.但事实恰恰相反.