我试图用谷歌搜索...
,但是不出所料,谷歌将其忽略了。
我有这段代码:
try {
// some code
}
catch( ... ) {
// catch logic
}
我猜测
...
代表任何类型的异常,我是对的吗?还有其他用法吗?我知道三种用例:
还有一种我错过的,是预处理:可变宏
是的,你说得对,catch(...)
意味着捕获所有异常。但是最好通过const引用来捕获异常,就像这样:
catch(std::exception const & ex)
{
//code here
}
来自MSDN的备注部分:
备注:
try子句后面的代码是受保护的代码段。throw表达式会抛出(引发)异常。catch子句后面的代码块是异常处理程序,如果throw和catch表达式中的类型兼容,则捕获(处理)throw表达式抛出的异常。有关在catch块中匹配类型的规则列表,请参见_。如果catch语句指定省略号(...)而不是类型,则catch块处理任何类型的异常,包括C异常和系统或应用程序生成的异常,例如内存保护、除以零和浮点违规。由于catch块按程序顺序尝试,因此这样的处理程序必须是其try块的最后一个处理程序。谨慎使用catch(…);通常这样的catch块用于记录错误并在停止程序执行之前执行任何特殊清理。除非catch块知道如何处理捕获的特定异常,否则不要允许程序继续运行。
try {
throw CSomeOtherException();
}
catch(...) { // Catch all exceptions – dangerous!!!
// Respond (perhaps only partially) to exception
throw; // Pass exception to some other handler
}
还有其他用途吗?
我见过的一个用法是在可变参数中使用,例如 'printf(const char* x, ...)'
void format(char* formatString, ...);
但不要搞错了,这被认为是 C 的遗留问题,而不是正式的 C++。 - syam