Gre*_*ill 12 c++ exception-handling try-catch
我遇到了一些类似于以下内容的C++代码:
class exception {};
int main()
{
try {
throw exception();
} catch (exception()) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
注意括号中的额外括号catch (exception()).根据Compiler Explorer,它被编译为与写入时相同的对象代码catch (exception &).
在什么基础上允许使用额外的括号,以及标准的哪一部分允许这样做?据我所知,一个catch子句需要一个类型说明符,但exception()似乎不是一个类型说明符.
Ker*_* SB 13
异常处理程序声明的工作方式类似于函数声明,因为数组和函数类型参数都调整为指针.(也就是说,数组和函数不能被"按值"抛出或捕获.)具体来说,[except.handle] p2说:
"数组
T"或函数类型的处理程序T被调整为"指向T" 的类型.
所以catch (exception())是完全相同的catch (exception(*p)()).
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |