为什么捕获异常播放允许尾括号

Why does a catch exception-declaration allow trailing parentheses?

本文关键字:许尾括 播放 捕获异常 为什么      更新时间:2023-10-16

我遇到了一些看起来如下的C 代码:

class exception {};
int main()
{
    try {
        throw exception();
    } catch (exception()) {
        // ...
    }
}

请注意catch (exception())中的额外括号集。根据Compiler Explorer的说法,这与使用catch (exception &)编写的对象代码一起编译为相同的对象代码。

允许额外的括号集,标准的哪一部分允许?据我所知,catch子句需要类型的指定符,但是exception()似乎不像类型的指定词。

异常处理程序声明与函数声明一样起作用,在该数组和函数类型参数中被调整为指示器。(也就是说,数组和函数不能被"以价值"扔或捕获。(具体来说,[除外] P2说:

类型" T的数组"或功能类型T的处理程序已调整为类型为"指针到T"。

所以catch (exception())catch (exception(*p)())相同。

exception()正在声明函数。per除外#nt:handler, exception-declaration 包含a 声明器。函数声明是一种声明器。很容易看到这一点,因为exception(int)也可以正常工作。请注意, exception-declaration 恰好与A parameter-declaration 完全相同,因此它与在参数中声明函数完全相同。