繁体   English   中英

“ set_unexpected”在VC2010中不起作用?

[英]“set_unexpected” doesn't work in VC2010?

我正在使用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”。

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

参见http://msdn.microsoft.com/zh-cn/library/wfa0edys(v=vs.100).aspx

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

由于throw异常的函数没有throw规范,因此可以预期该异常。 从逻辑上讲,意外的异常处理程序仅处理意外的异常 没有什么可以使此异常意外的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM