使用throw()的extern声明

时间:2013-09-19 13:31:48

标签: c++ throw

可以解释一下utsname.h中找到的以下表达式的语法(utsname definition):

extern int uname (struct utsname *__name) __THROW;

__THROW是一个宏,并从throw()提供cdefs.h。为什么它可以这样放在extern函数的定义中?

1 个答案:

答案 0 :(得分:2)

将函数声明为throw意味着使用此函数时不会抛出任何异常。

http://www.cplusplus.com/doc/tutorial/exceptions/

复制

例外规范

当声明一个函数时,我们可以通过在函数声明中附加一个throw后缀来限制它可能直接或间接抛出的异常类型:

float myfunction (char param) throw (int);

这声明了一个名为myfunction的函数,它接受一个char类型的参数并返回一个float类型的元素。此函数可能抛出的唯一例外是int类型的异常。如果它直接或间接地抛出具有不同类型的异常,则它不能被常规的int类型处理程序捕获。

如果此throw说明符保留为空且没有类型,则表示该函数不允许抛出异常。不允许抛出说明符(常规函数)的函数抛出任何类型的异常:

int myfunction (int param) throw(); // no exceptions allowed
int myfunction (int param);         // all exceptions allowed