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

时间:2016-04-20 08:08:40

标签: c++ c++11 language-lawyer catch-block

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

try{}
catch(...){}

据我所知,...表示任何例外情况。

我的问题是:为什么C ++标准选择(...)而不仅仅是()?例如,在函数中,如果您不需要参数,只需添加()

void foo();

它是否以任何方式与可变参数模板相关?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

但事实并非如此,

catch(...){
    throw;
}

实际上重新抛出...

捕获的异常