在try catch语句中我们可以这样做:
try{}
catch(...){}
据我所知,...
表示任何例外情况。
我的问题是:为什么C ++标准选择(...)
而不仅仅是()
?例如,在函数中,如果您不需要参数,只需添加()
:
void foo();
它是否以任何方式与可变参数模板相关?
答案 0 :(得分:3)
它与可变参数模板无关,因为它们来自C ++ 11,而catch (...)
几乎从一开始就存在(大约二十年前)。
至于为什么他们选择(...)
代替()
,你可以问Bjarne Stroustrup,但这似乎不重要。无论如何都不会经常使用此功能。在C ++中,(...)
通常意味着“任何类型的任意数量的东西”,而()
通常意味着“没什么”。根据您的观点,其中任何一个可能更适合“捕获所有异常”。
答案 1 :(得分:1)
catch()
强烈暗示没有任何东西传递给那个特定的捕获区。
但事实并非如此,
catch(...){
throw;
}
实际上重新抛出...