C++在错误处理throw时到底throw了什么东西?

  问题:(1)为什么在struct ooops已经多态过的what()在throw *p时会出unknown error呢?

(2)catch里的std::exception&的&可以不可以不加?

(3)throw的到底是什么东西,原文的注释里写的是std::exception的copy constructor?

struct ooops : std::exception {
	const char* what()  const NOEXCEPT /*noexcept*/ override{ return "Ooops!\n"; }
};
 
int test_exception_2()
{
	ooops e;
	std::exception* p = &e;
	try {
		throw e;       // throwing copy-constructs: ooops(e)
	} catch (std::exception& ex) {
		std::cout << ex.what(); // 0oops!
	}
	
	try {
		throw *p;      // throwing copy-constructs: std::exception(*p)
	} catch (std::exception& ex) {
		std::cout << ex.what(); // Unknown exception
	}
 
	return 0;
}

————————————————
版权声明:本文为CSDN博主「fengbingchun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fengbingchun/article/details/78303734

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。