在c ++中有什么用...

时间:2013-12-07 21:02:01

标签: c++ operators

我尝试用谷歌搜索...,但正如预期的那样,谷歌忽略了它。

我有这段代码:

try {

// some code
}

catch( ... ) {
// catch logic

}

我猜...表示任何类型的例外,我是对的吗?
这个的任何其他用法?

2 个答案:

答案 0 :(得分:7)

我知道三个用例:

  • 可变数量的参数,例如'printf(const char * fmt,...)'
  • 抓住任何东西作为'catch(...)'
  • 可变参数模板,例如'template< typename ... T>'和解包'T ...'(c ++ 11)

我错过的另一个是预处理:可变参数宏

答案 1 :(得分:2)

是的,你是对的,catch(...)意味着捕获所有异常。但是,通过const引用捕获异常是一种很好的做法。像

catch(std::exception const & ex) 
{ 
//code here
} 

来自MSDN备注部分:

  

<强>说明: -

     

try子句之后的代码是受保护的代码段。该   throw表达式抛出(引发)异常。之后的代码块   catch子句是异常处理程序,并捕获(处理)   抛出表达式抛出的异常,如果throw和中的类型   catch表达式是兼容的。有关管理的规则列表   catch块中的类型匹配,请参阅 _ 。如果是catch语句   指定省略号(...)而不是类型,即catch块   处理任何类型的异常,包括C异常和system-或   应用程序生成的异常,例如内存保护,除以   零和浮点违规。因为尝试了阻挡块   程序顺序,这样的处理程序必须是其try的最后一个处理程序   块。 谨慎使用catch(...);通常这样的捕获块是   用于记录错误并在停止之前执行任何特殊清理   程序执行。除非catch块知道如何&gt;处理捕获的特定异常,否则不允许程序继续。

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, ...)'

等可变数量参数的用法