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

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

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

try{}
catch(...){}

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

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

void foo();

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

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

至于他们为什么选择 (...) 而不是 (),你可以问 Bjarne Stroustrup,但这似乎并不重要。无论如何,这个功能并不经常使用。在 C++ 中,(...) 通常表示 "Any number of things of any types",而 () 通常表示 "Nothing." 根据您的观点,"catch all exceptions."

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

但事实并非如此,

catch(...){
    throw;
}

实际上是重新抛出被...

捕捉到的异常