gpt4 book ai didi

c++ - 带有 throw() 的外部声明

转载 作者:行者123 更新时间:2023-11-28 03:09:24 24 4
gpt4 key购买 nike

谁能解释一下在 utsname.h(utsname 定义)中找到的以下表达式的语法:

extern int uname (struct utsname *__name) __THROW;

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

最佳答案

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

复制自http://www.cplusplus.com/doc/tutorial/exceptions/

异常规范

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

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++ - 带有 throw() 的外部声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com