带有 throw() 的外部声明
extern declaration with throw()
可以解释一下utsname.h(utsname定义)中以下表达式的语法吗?
extern int uname (struct utsname *__name) __THROW;
__THROW
是一个宏,从cdefs.h
中给出throw()
。为什么它可以这样放在 extern 函数的定义中?
将
函数声明为 throw 意味着使用此函数时不会引发异常。
从 http://www.cplusplus.com/doc/tutorial/exceptions/复制
异常规范
在声明函数时,我们可以通过在函数声明中附加一个抛出后缀来限制它可能直接或间接抛出的异常类型:
float myfunction (char param) throw (int);
这声明了一个名为 myfunction 的函数,该函数接受一个 char 类型的参数并返回一个 float 类型的元素。此函数可能引发的唯一异常是 int 类型的异常。如果它直接或间接抛出具有不同类型的异常,则常规 int 类型处理程序无法捕获它。
如果此抛出说明符留空且没有类型,则意味着不允许该函数引发异常。没有抛出说明符的函数(常规函数)允许抛出任何类型的异常:
int myfunction (int param) throw(); // no exceptions allowed
int myfunction (int param); // all exceptions allowed
相关文章:
- C++ 没有在命名空间外部声明的类主体的类
- C++:在循环内部或外部声明一个向量
- 我可以清除外部声明为进一步使用的数组吗?
- C++中"T 的未知边界数组"的外部声明
- 如果在函数中使用外部声明怎么办
- 如何在类外部声明专业模板方法
- 关于全局变量的外部声明"C"外部声明
- 外部声明变量的定义适用于一个函数,但不适用于另一个函数
- 用于在方法或函数外部声明的变量的内存
- 动态调度在类外部声明的方法
- C++外部声明隔离
- 有没有办法从类外部声明一个受保护C++变量?
- 带有 throw() 的外部声明
- 在函数外部声明对象,将其作为引用传递,然后在函数内部创建它
- 使用 "auto" 的声明是否与使用具体类型说明符的外部声明匹配?
- 访问在类外部声明的作用域枚举
- 这些外部声明在C++有什么区别
- 全局变量外部声明后的线程专用指令
- c++变量外部声明
- c++:在类内部从外部声明枚举器,以便可以在私有成员中使用