在github上看到一段代码,发现C++的throw;可以写在catch块外的任意位置
(一般throw;应该放在catch块中表示重新抛出异常)
所以用cygwin写了一段代码,发现可以编译成功,
而且这样抛出的异常不会被捕获任意异常的catch所捕获,
测试程序如下:
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
try {
cout << "Hello, world!" << endl;
throw "Oh, My God";
cout << "Cannot reach!" << endl;
} catch (...) {
cout << "Catch exception!" << endl;
}
try {
cout << "Hello, world!" << endl;
throw;
cout << "Cannot reach!" << endl;
} catch (...) {
cout << "Catch exception!" << endl;
}
}
/*
$ c++ -g test.cpp
$ ./a.exe
Hello, world!
Catch exception!
Hello, world!
terminate called without an active exception
Aborted (core dumped)
*/
我觉得这种写法更像assert(0);