C++为什么第二个表达式不是有效的?

hel*_*hod 4 c++

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

class Vehicle {
public:
  virtual ~Vehicle() {}
};
class LandCraft: public Vehicle {};
class Truck: public LandCraft {};
Run Code Online (Sandbox Code Playgroud)

现在,我们有两个表达式:

Truck truck;
Vehicle& vehicle = truck;
Run Code Online (Sandbox Code Playgroud)

根据作业的解决方案,第二个表达无效.但为什么?我的编译器根本没有抱怨,我也没有看到这里应该出错的地方.

Jar*_*Par 6

听起来好像家庭作业解决方案不正确.从派生的实例初始化对基类型的引用没有任何问题.

编辑

正如有几个人指出的那样(特别是Slaks)虽然这个声明本身没有任何问题,但它确实提供了未来发生错误的可能性.它允许你任意地把任何东西Vehicle放到一个期望的地方Truck.例如,考虑以下内容

Truck truck;
Vehicle& reallyATruck = truck;
reallyATruck = LandCraft();
Run Code Online (Sandbox Code Playgroud)

哎呦!