2

在 try catch 语句中我们可以这样做:

try{}
catch(...){}

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

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

void foo();

它是否与可变参数模板有任何关系?

4

2 回答 2

7

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

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

于 2016-04-20T08:11:15.290 回答
3

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

但事实并非如此,

catch(...){
    throw;
}

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

于 2016-04-20T08:31:04.420 回答