“set_unexpected”在VC2010中不起作用?

时间:2012-06-17 04:20:19

标签: c++ visual-studio-2010 visual-c++ exception exception-specification

我正在使用VC2010,并编写以下代码来测试“set_unexpected”函数。

#include <iostream>
#include <exception>

void my_unexpected_handler()
{
    std::cout << "unexpected handler" << std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    set_unexpected(my_unexpected_handler);

    throw 1;

    return 0;
}

但是,永远不会调用“my_unexpected_handler”(字符串不会打印到控制台,我试图在my_unexpected_handler中设置断点,但没有遇到)。

我的代码出了什么问题?

由于


抱歉,我误解了意外的异常。但是,即使我将代码更改为以下

#include <iostream>
#include <exception>

void my_unexpected_handler()
{
    std::cout << "unexpected handler" << std::endl;
}

void func() throw(int)
{
    throw 'h';
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::set_unexpected(my_unexpected_handler);

    func();

    return 0;
}

它仍然不起作用?也就是说,不会调用“my_unexpected_handler”。

2 个答案:

答案 0 :(得分:3)

你可能没有做错任何事。您正在使用visual studio 2010,并且该编译器不支持异常规范。好吧,它会使用它们进行语法检查代码,但不会在运行时检查异常类型。

请参阅http://msdn.microsoft.com/en-us/library/wfa0edys(v=vs.100).aspx

这通常不被认为是一个问题,因为通常认为异常规范没有用,并且实际上已经在c ++ 11标准中被弃用

答案 1 :(得分:1)

由于抛出异常的函数没有throw规范,因此预期会出现异常。从逻辑上讲,意外的异常处理程序只处理unexpected exceptions。没有什么能让这个异常出乎意料。