为什么?(三分)在catch块中存在

why ... (three points) in catch block is exist?

本文关键字:catch 存在 三分 为什么      更新时间:2023-10-16

在try-catch语句中,我们可以执行以下操作:

try{}
catch(...){}

据我所知,...意味着任何例外。

我的问题是:为什么C++标准选择这种方式(...)而不仅仅是()?例如,在函数中,如果不需要参数,只需放入():

void foo();

它与可变模板有任何关系吗?

它与可变模板无关,因为这些模板出现在C++11中,而catch (...)几乎从一开始就存在(大约20年前)。

至于他们为什么选择(...)而不是(),你可以问Bjarne Stroustrup,但这似乎并不重要。无论如何,这个功能并没有经常使用。在C++中,(...)通常表示"任何类型的任意数量的事物",而()通常表示"什么都没有"。根据您的观点,其中任何一个可能更适合于"捕获所有异常"。

catch()将强烈暗示没有任何东西传递给那个特定的catch块。

但事实并非如此,

catch(...){
    throw;
}

实际上重新抛出... 捕获的异常