星期四, 十二月 05, 2013

c++11革命性特征,增加软件健壮性。

Java处理异常通过try
{}catch(Exception e)//或者catch(Throwable t)
{}可以处理所有的异常了。
c++早期虽然可以通过
try
{}catch(...){}
来处理所有的异常。但是无法得知是什么异常类型,只能给出自己定制的异常信息。

c++11 后,提供了std::current_exception()即可处理所有异常了,并明确异常信息。
当然为了提出这个一场信息,处理过程依然不够java优雅,
需要一个再次扔出异常指针的过程。
代码:
catch(...)
 {
         std::exception_ptr eptr= std::current_exception(); // capture
         handle_eptr(eptr);
     }

void handle_eptr(std::exception_ptr eptr) // passing by value is ok
{
    try {
        if (eptr != std::exception_ptr()) {
            std::rethrow_exception(eptr);
        }
    } catch(const std::exception& e) {
        std::cout << "Caught exception \"" << e.what() << "\"\n";
    }
}