我有一个关于抛出对象的语法的一般性问题。考虑:

#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/

10-11 18:51