c++の仮想関数について質問です。
次のように非常に単純なBaseとそれを継承したDerivedを用意します。

#include <iostream>

struct Base {
virtual void f()
{
   std::cout << "Base" << std::endl;
}
};

struct Derived : Base {
void f() override
{
    std::cout << "Derived" << std::endl;
}
};

int main()
{
  {
    Derived d;
    Base b = d;

    b.f();
  }

  {
    Derived d;
    Base& b = d;

    b.f();
  }
}

実行結果が、

Base
Derived

となります。

なぜ前者ではBaseのf()が呼ばれてしまうのでしょうか。