【发布时间】:2018-11-21 12:50:25
【问题描述】:
有问题的代码是这样的:
struct something_bad_happened_exception : std::exception {};
void foo() {
something_bad_happened_exception e;
throw e;
}
clang 发出警告,内容如下:
Throw 表达式应该抛出匿名临时值 [cert-err09-cpp]
这意味着foo()应该改为:
void foo() {
throw something_bad_happened_exception();
}
为什么抛出一个临时变量而不是一个局部变量更好?
【问题讨论】:
-
@StoryTeller 我已经看到了,但没有解释,只是触发警告的详细信息。
-
严格来说,在你的情况下,这似乎是一个愚蠢的警告,一个真正的误报。
-
所以警告的目的是警告抛出诸如实例变量之类的东西?如果是,这可能是答案...
-
如果
e的复制构造函数可以抛出(例如,如果e有一个std::string成员变量)会有区别
标签: c++