Let's say I have such function declared noexcept
:
int pow(int base, int exp) noexcept
{
return (exp == 0 ? 1 : base * pow(base, exp - 1));
}
From my very little, but slowly growing knowledge of C++, I can noexcept
when I'm certain that function will not throw an exception. I also learned that it can be in some range of values, lets say that I consider my function noexcept
when exp
is smaller than 10, and base
smaller than 8 (just as an example). How can I declare that this function is noexcept
in such a range of values? Or the most I can do is leave a comment for other programmers that it should be within some certain ranges?
You can use a condition for noexcept
, but that condition must be a constant expression. It cannot depend on the value of parameters passed to the function, becaue they are only known when the function is called.
From cppreference/noexcept:
Every function in C++ is either non-throwing or potentially throwing
It cannot be both nor something in between. In your example we could make base
a template parameter:
template <int base>
int pow(int exp) noexcept( base < 10)
{
return (exp == 0 ? 1 : base * pow<base>(exp - 1));
}
Now pow<5>
is a function that is non-throwing, while pow<10>
is a function that is potentially throwing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With