我正在使用VC2010,並編寫以下代碼來測試「set_unexpected」函數。「set_unexpected」在VC2010中不起作用?
#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」。
這個代碼不應該被棄用甚至編譯。你需要用'std ::'限定'set_unexpected'。發佈實際的代碼。另外,如果你在'main'中,你可能正在尋找'set_terminate'。 – dirkgently
注意警告:'警告C4290:除了指示函數不是__declspec(nothrow)外,忽略C++異常規範' –