【发布时间】:2012-09-14 21:48:40
【问题描述】:
今天我在catch 块中发现了一个错误:
catch (const exception& e){
// do something
// throw e; <-- bug!
throw; // <-- right thing to do
}
基本上,如果我重新抛出异常e 显式,我会得到一个新的std::exception 重构,实际上来自what() 方法的消息是默认的std::string,而不是我的自定义构建的消息。
解释是什么?我以为throw;只是throw ExceptionJustCaught;的简写。
【问题讨论】:
-
这是值和引用之间的区别。
-
这是一个非常重要的概念,但经常被忽视(在我看来,这是一个棘手的语法,在编译时至少应该是一个警告......)。好问题!