有条件地指定 noexcept 函数

Mic*_*rek 4 c++ noexcept

假设我声明了这样的函数noexcept

int pow(int base, int exp) noexcept
{
    return (exp == 0 ? 1 : base * pow(base, exp - 1));
}
Run Code Online (Sandbox Code Playgroud)

从我对 C++ 的了解很少,但慢慢增长的知识来看,noexcept当我确定该函数不会抛出异常时,我可以做到这一点。我还了解到它可以在某个值范围内,假设我在小于 10 和小于 8noexcept时考虑我的函数(仅作为示例)。我如何声明这个函数处于这样的值范围内?或者我最多能做的就是给其他程序员留下评论,说它应该在某个特定的范围内?expbasenoexcept

for*_*818 8

您可以使用条件 for noexcept,但该条件必须是常量表达式。它不能依赖于传递给函数的参数值,因为它们只有在调用函数时才知道。

来自cppreference/noexcept

C++ 中的每个函数要么不抛出,要么可能抛出

它不可能两者兼而有之,也不可能介于两者之间。在您的示例中,我们可以创建base一个模板参数:

template <int base>
int pow(int exp) noexcept( base < 10)
{
    return (exp == 0 ? 1 : base * pow<base>(exp - 1));
}
Run Code Online (Sandbox Code Playgroud)

Nowpow<5>是一个不抛出异常的函数,而 whilepow<10>是一个可能抛出异常的函数。