我有一个关于抛出对象语法的一般性问题。考虑以下代码:
#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的书籍(以及这个网站),但是无法找到任何解释似乎对我来说是不一致的。
bad b;
与bad;
并不相同,就像bad b();
与bad();
并不相同。 - Ed S.