我听说function-try-block可用于普通函数,成员函数,构造函数等。我想证实一下这个事实。但是在使用构造函数时,我遇到了一个我不理解的行为。
代码是这样的:
#include <iostream>
using namespace std;
void throws() {
throw "Exception"; //throw an exception of string literal
}
class C {
public:
//constructor1
C() try {
throws();
} catch (const char *) {
cout << "Catched an exception.\n";
} catch (...) {
cout << "Unknown exception.\n";
}
//constructor2
// C() {
// try {
// throws();
// } catch (const char *) {
// cout << "Catched an exception.\n";
// } catch (...) {
// cout << "Unknown exception.\n";
// }
// }
};
int main() {
C c; //=> "Catched an exception"
//then error occurs
//with a message "uncaught exception of type char const*"
}
constructor1
:
在创建类C
的对象时,会通过函数throws()
抛出异常,并且它会被捕获,以便输出消息"Catched an exception."
。但是,异常传播并使程序终止。
constructor2
:
输出消息,异常不会传播。
constructor1
和constructor2
在语法上是否相同?
环境:
$ gcc --version
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.4.0
Thread model: posix