为什么抛出的匿名对象能用引用接收?

为什么抛出的匿名对象能用引用接收?

#include
using namespace std;

class MyException
{
public:
    MyException()
    {
        cout << "MyException默认构造函数调用" << endl;
    }
    MyException(const MyException& e)
    {
        cout << "MyException拷贝构造函数调用" << endl;
    }
    ~MyException()
    {
        cout << "MyException析构函数调用" << endl;
    }
};
void doWork()
{
    throw MyException();
}
void test01()
{
    try
    {
        doWork();
    }
    //为什么抛出的匿名对象能用引用接收?
    catch (MyException& e)
    {
        cout << "自定义类型捕获" << endl;
    }
}
int main()
{
    test01();

    //当我试着直接用引用接收匿名对象时
    MyException& e1 = MyException();// err:非常量引用的初始值必须为左值

    return 0;
}