C++ 在c+;中,哪种数据类型不能作为异常抛出+;程序

C++ 在c+;中,哪种数据类型不能作为异常抛出+;程序,c++,exception-handling,C++,Exception Handling,可以抛出int、float、long或自定义数据类型(如类和结构)的异常。但在C++中,哪个数据类型不能作为异常抛出?< P>异常不能< /强>抛出不完整类型: §15.1 如果临时变量是左值,用于初始化匹配处理程序(15.3)中命名的变量如果异常对象的类型是不完整的类型或指向不完整类型的指针,而不是(可能是cv限定的)void,则程序的格式不正确。除了这些限制和15.3中提到的类型匹配限制外,throw的操作数在调用中完全被视为函数参数(5.2.2)或返回语句的操作数 §15.5 当抛出的对象

可以抛出int、float、long或自定义数据类型(如类和结构)的异常。但在C++中,哪个数据类型不能作为异常抛出?

< P>异常<强>不能< /强>抛出不完整类型:

§15.1

如果临时变量是左值,用于初始化匹配处理程序(15.3)中命名的变量如果异常对象的类型是不完整的类型或指向不完整类型的指针,而不是(可能是cv限定的)void,则程序的格式不正确。除了这些限制和15.3中提到的类型匹配限制外,throw的操作数在调用中完全被视为函数参数(5.2.2)或返回语句的操作数

§15.5

当抛出的对象是类对象时,即使省略了复制/移动操作,复制/移动构造函数和析构函数也应可访问(12.8)

15.3.1异常处理


处理程序中的异常声明描述可能导致输入该处理程序的异常类型异常声明不应表示不完整类型或右值引用类型。异常声明不应表示指向不完整类型的指针或引用,除了void*、const void*、volatile void*或const volatile void*

抽象类型外,(指向)不完整类型的指针,以及没有可访问的复制/移动构造函数的类型。我认为这涵盖了所有内容。您可以抛出数组,但它们会衰减到指向第一个元素的指针。15.1/5也是相关的。谢谢jrok,您应该给出您的评论作为答案!