【发布时间】:2015-10-20 16:30:37
【问题描述】:
我有以下 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 并非如此。
附:在将 catch (const E& e) 更改为 catch (E e) 后,一个讨厌的错误似乎消失了,这加强了我的立场 - 此代码无效有效。
【问题讨论】:
-
上面的代码应该是有效的,并且通过引用捕获应该可以工作。 a)您的真实代码与上述不同吗? b)您使用的是哪个编译器? throwing e 应该抛出 e 的副本。
-
一个真实的例子会很好。示例中缺少/错误太多。
-
@user2079303 是的。对不起,我的错,我做了一个编辑。
-
"我可以说返回对类成员的引用几乎总是无效的(我相信每个人都同意这个说法)。" 我会这么说大多数吸气剂都这样做。它们返回对成员的 const 引用。
-
您的同事声称
throw的情况并非如此?没有语法可以通过引用抛出任何东西(除非用throw;重新抛出)。