我有一个关于抛出对象的语法的一般性问题。考虑:
#include <stdio.h>
struct bad { };
void func() {
throw bad;
}
int main(int, char**) {
try {
func();
} catch(bad) {
printf("Caught\n");
}
return 0;
}
该代码无法编译(g++ 4.4.3),因为“throw”行必须替换为:
throw bad();
为什么是这样?如果我正在创建一个堆栈分配错误,则可以这样构造它:
bad b;
// I can't use 'bad b();' as it is mistaken for a function prototype
我已经查阅了Stroustrup的书(和本网站),但是无法找到任何解释,这似乎对我来说是个矛盾之处。
最佳答案
throw bad;
不起作用,因为
bad
是一种数据类型,一种结构(struct bad
)。您不能引发数据类型,而需要引发对象,该对象是数据类型的实例。您需要执行以下操作:
bad obj;
throw obj;
因为这会创建一个
obj
结构的对象bad
,然后抛出该对象。关于c++ - C++抛出语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8142100/