在C++中,要抛出的对象的构造函数本身抛出异常是否有效?换句话说,当我们还在构建要抛出的对象时,我们是否已经在抛出?
struct Error {
Error() {
if (someCondition()) {
throw anotherObject();
}
}
};
void test() {
throw Error();
}
最佳答案
throw 表达式需要是 throw Error();
,但是是的,这是有效的。
在抛出 Error
对象之前,必须构造它。即,子表达式 Error()
必须先求值,然后才能在完整表达式中求值 throw
运算符。如果子表达式 Error()
本身的计算抛出异常,则完整表达式的其余部分(即 throw
)将不会被计算。
关于c++ - 要抛出的对象的构造函数可以抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737436/