gpt4 book ai didi

c++ - 为什么 catch 异常声明允许使用尾括号?

转载 作者:IT老高 更新时间:2023-10-28 23:16:55 27 4
gpt4 key购买 nike

我遇到了一些如下所示的 C++ 代码:

class exception {};

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

注意catch (exception()) 中的额外括号。根据Compiler Explorer , 这被编译成相同的目标代码,就好像它是用 catch (exception &) 编写的一样。

在什么基础上允许额外的括号集?标准的哪一部分允许这样做?据我所知,catch 子句需要类型说明符,但 exception() 似乎不像类型说明符。

最佳答案

异常处理程序声明像函数声明一样工作,其中数组和函数类型参数被调整为指针。 (也就是说,数组和函数不能“按值”抛出或捕获。)具体来说,[except.handle]p2 说:

A handler of type “array of T” or function type T is adjusted to be of type “pointer to T”.

所以 catch (exception()) 等同于 catch (exception(*p)())

关于c++ - 为什么 catch 异常声明允许使用尾括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48858583/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com