C++抛出语法

C++ throw syntax

本文关键字:语法 C++      更新时间:2023-10-16

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

#include <stdio.h>
struct bad { };
void func() {
    throw bad;
}
int main(int, char**) {
    try {
        func();
    } catch(bad) {
        printf("Caughtn");
    }
    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;

因为这创建了CCD_ 4结构的对象CCD_。

您需要抛出结构的一个实例。

void func() {
    bad b;
    throw b;
}
不同之处在于throw的参数是一个对象,而不是一个类型。将变量声明为bad b的语法为[type] [object_name];。并键入!=例子