- 论坛徽章:
- 0
|
//: C01:Unexpected.cpp
// From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison.
// (c) 1995-2004 MindView, Inc. All Rights Reserved.
// See source code use permissions stated in the file 'License.txt',
// distributed with the code package available at www.MindView.net.
// Exception specifications & unexpected(),
//{-msc} (Doesn't terminate properly)
#include <exception>
#include <iostream>
using namespace std;
class Up {};
class Fit {};
void g();
void f(int i) throw(Up, Fit) {
switch(i) {
case 1: throw Up();
case 2: throw Fit();
}
g();
}
// void g() {} // Version 1
void g() { throw 47; } // Version 2
void my_unexpected() {
cout << "unexpected exception thrown" << endl;
// exit(0);
}
int main() {
set_unexpected(my_unexpected); // (Ignores return value)
for(int i = 1; i <=3; i++)
try {
f(i);
} catch(Up) {
cout << "Up caught" << endl;
} catch(Fit) {
cout << "Fit caught" << endl;
}
} ///:~
Run时输出:(期望值)
Up caught
Fit caught
unexpected exception thrown
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Debug时,第一次进入f(i)时
void f(int i) throw(Up, Fit) {
switch(i) {
case 1: throw Up();//本应该throw后跳出
case 2: throw Fit();//但是Debug接着执行了这一行
}
g();//接着执行了这一行
} |
|