为什么...(三点)在 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;
}
实际上是重新抛出被...
捕捉到的异常
在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;
}
实际上是重新抛出被...