Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在 C++ 中,对于将要被抛出的对象的构造函数自己抛出异常是否有效?换句话说,当我们仍在构造要抛出的对象时,我们是否还在抛出中?
struct Error { Error() { if (someCondition()) { throw anotherObject(); } } }; void test() { throw Error(); }
throw 表达式需要是throw Error();,但是是的,这是有效的。
throw Error();
在Error抛出对象之前,必须先构造它。也就是说,Error()必须先计算子表达式,然后throw才能在完整表达式中计算运算符。如果子表达式Error()本身的求值引发异常,则完整表达式的其余部分(即throw)将不会被求值。
Error
Error()
throw