1

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

4

1 回答 1

3

异常不能抛出不完整类型:

§ 15.1

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

§ 15.5

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

15.3.1 处理异常

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

于 2013-07-22T11:11:37.733 回答