當函數拋出異常時,標準行爲不在有效異常列表中時是什麼標準行爲?例如,當我運行此代碼:C++異常規範 - 處理無效異常
#include <iostream>
#include <cstdlib>
using namespace std;
void NotLegal() throw(char) {
throw 42;
}
void myunexpected() {
cout << "exception not in list\n";
cin.get();
exit(0);
}
int main()
{
set_unexpected(myunexpected);
try {
NotLegal();
}
catch(...) {
cout << "exception catched";
cin.get();
}
return 0;
}
它的行爲在不同的GCC和Visual Studio C++編譯器:
- 2010年VS預計不會異常一般異常處理程序捕獲。
- 在GCC
unexpected()
處理函數被調用而不是捕獲異常。
這是什麼區別?爲什麼MS C++編譯器不會調用unexpected()
回調?
您是否嘗試更改您的示例?只是爲了確保你不會在42和char之間自動轉換。只需嘗試throw()而不是throw(char)。 –
這與空例外列表相同。 –