假设您具有以下对象层次结构:

class Vehicle {
public:
  virtual ~Vehicle() {}
};
class LandCraft: public Vehicle {};
class Truck: public LandCraft {};

现在,我们有两个表达式:
Truck truck;
Vehicle& vehicle = truck;

根据一项作业的解决方案,第二个表达式无效。但为什么?我的编译器一点也不提示,在这里我看不出应该怎么做。

最佳答案

听起来家庭作业解决方案是不正确的。从派生实例初始化对基本类型的引用没有错。

编辑

正如一些人指出的(尤其是Slaks),虽然此声明本身没有错,但它确实为将来的错误提供了可能。它允许您将任何Vehicle随意放入需要Truck的地方。例如考虑以下

Truck truck;
Vehicle& reallyATruck = truck;
reallyATruck = LandCraft();

哎呀!

08-24 18:44