标准对异常中抛出的类型有什么要求?

What requirements does the standard place upon a type thrown in an exception?

本文关键字:什么 类型 异常 标准      更新时间:2023-10-16

我认为异常对抛出类型施加的影响比标准实际施加的要大一些。我想澄清这个困惑。这些人到底被强加了什么?

c++ ISO规范& section;15.1/3声明

throw表达式的类型不能是an不完整类型,或指向不完整类型的指针或引用,但不包括void*、const void*、volatile void*或const volatile void*。除了这些限制和15.3中提到的类型匹配限制外,throw的操作数完全被视为调用(5.2.2)中的函数实参或返回语句的操作数。

从这里看来,你应该能够抛出任何你想抛出的类型,只要你不抛出一个你只向前声明过的类型。

EDIT:正如@Billy ONeal指出的,类型必须是可复制的,这意味着它应该支持复制构造函数。