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