在C ++中,对于要抛出的对象的构造函数是否有效会引发异常?换句话说,当我们还在构建要抛出的对象时,我们还在抛出吗?
struct Error {
Error() {
if (someCondition()) {
throw anotherObject();
}
}
};
void test() {
throw Error();
}
答案 0 :(得分:9)
throw表达式需要throw Error();
,但是,这是有效的。
在抛出Error
对象之前,必须构造它。也就是说,必须先评估子表达式Error()
,然后才能在完整表达式中计算throw
运算符。如果子表达式Error()
的评估本身会引发异常,则不会评估完整表达式的其余部分(即throw
)。