我有以下的C++代码。
template <class E>
class ExceptionWrapper {
public:
explicit ExceptionWrapper(const E& e): e(e) {}
void throwException() {
throw e;
}
private:
E e;
};
...
try {
ExceptionWrapper<E> w(...);
w.throwException();
} catch (const E& e) {
...
}
...
问题:这段代码有效吗?我可以争辩返回对类成员的引用几乎总是无效的(我相信每个人都同意这个说法)。然而,我的同事声称这在throw
的情况下并非如此。
P.S. 将catch (const E& e)
更改为catch (E e)
后,一个令人讨厌的错误似乎消失了,这加强了我的立场——即这段代码是无效的。
throw
的哪一点不正确?除了使用throw;
重新抛出异常时,没有语法可以通过引用抛出任何内容。 - eerorika