C++ 职能机构例外情况
可能重复:C++ 职能机构例外情况,c++,exception,C++,Exception,可能重复: 这些try-catch块的效用和行为有什么不同?什么时候我会喜欢一种形式而不是另一种形式 int f() { try { ... } catch(...) { ... } } int f() try { ... } catch (...) { ... } 函数try-catch块只在构造函数中有用,即使如此,也不是很有用。最好忘了它们的存在。函数try-catch块只在构造函数中有用,即使如此,也不是很有用。最好忘记它们的存在。如果整个身体都
这些try-catch块的效用和行为有什么不同?什么时候我会喜欢一种形式而不是另一种形式
int f() {
try {
...
} catch(...) {
...
}
}
int f() try {
...
} catch (...) {
...
}
函数try-catch块只在构造函数中有用,即使如此,也不是很有用。最好忘了它们的存在。函数try-catch块只在构造函数中有用,即使如此,也不是很有用。最好忘记它们的存在。如果整个身体都必须进入例外块,我倾向于选择第二种形式,因为它更容易阅读(例如,减少一个缩进级别) 然而,这起作用的主要地方是构造函数。考虑:
Foo::Foo ()
try : member_with_throwing_constructor(initial_value)
{
}
catch ( ... )
{
// will process exceptions thrown by `member_with_throwing_constructor`
// this will be added by the compiler if you
// don't finish by a `throw ...` statement.
throw;
}
及
这两个代码段具有完全不同的行为。第一个将捕获在数据成员构造函数中引发的异常(通常通过初始值设定项列表,但默认构造函数也适用),并将自动重新引发异常,因为无法安全创建实例。第二个表单不包括数据成员初始化,允许您选择是否保留对象
我还想在main()
中添加一个全局try-catch,以帮助调试未捕获的异常。以下代码段:
int main ( int, char ** )
try
{
// main program...
}
catch ( const std::exception& error )
{
std::cerr << "Uncaught exception: '" << error << "'." << std::endl;
return (EXIT_FAILURE);
}
catch ( ... )
{
std::cerr << "Uncaught exception of unknown type." << std::endl;
return (EXIT_FAILURE);
}
int main(int,char**)
尝试
{
//主程序。。。
}
捕获(const std::异常和错误)
{
std::cerr如果整个正文必须进入例外块,我倾向于选择第二种形式,因为它更易于阅读(例如,减少一个缩进级别)
然而,这起作用的主要地方在于施工人员。考虑:
Foo::Foo ()
try : member_with_throwing_constructor(initial_value)
{
}
catch ( ... )
{
// will process exceptions thrown by `member_with_throwing_constructor`
// this will be added by the compiler if you
// don't finish by a `throw ...` statement.
throw;
}
及
这两个代码段具有完全不同的行为。第一个代码段将捕获在数据成员构造函数中引发的异常(通常通过初始值设定项列表,但默认构造函数也适用)并将自动重新引发异常,因为无法安全创建实例。第二个表单不包含数据成员初始化,允许您选择是否保留该对象
我还想在main()
中添加一个全局try-catch,以帮助调试未捕获的异常。以下代码段:
int main ( int, char ** )
try
{
// main program...
}
catch ( const std::exception& error )
{
std::cerr << "Uncaught exception: '" << error << "'." << std::endl;
return (EXIT_FAILURE);
}
catch ( ... )
{
std::cerr << "Uncaught exception of unknown type." << std::endl;
return (EXIT_FAILURE);
}
int main(int,char**)
尝试
{
//主程序。。。
}
捕获(const std::异常和错误)
{
原则上,它们可能在构造函数中有一些用途。但是,我也从来没有使用过它们。原则上,它们可能在构造函数中有一些用途。但是,我也从来没有使用过它们。关于在构造函数中使用FTB的详细信息,请参见+1。不过,您能否为初始值设定项列表添加一些实际语法示例?+1初始化列表中的异常。@KerrekSB:添加了注释并请求语法示例。+1获取有关在构造函数中使用FTB的详细信息。您是否可以为初始化列表添加一些实际语法示例?+1获取初始化列表中的异常。@KerrekSB:添加了注释并请求语法示例十,。