C++抛出语法
C++ throw syntax
我有一个关于抛出对象语法的一般问题。考虑:
#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];
。并键入!=例子
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么