在 C++ 函数中计算斐波那契并抛出编译时错误

Computing fibonacci in c++ function and throwing compile-time error

我需要编写这个函数 fibo。 如果数字太大,应该显示为编译错误(主函数的最后一行) 主要功能应该保持原样。 有什么建议吗?

#include <iostream>

int fibo(int n)
{
    if (n <= 1)
        return n;
    //if (n>=300) throws ... ?
    return fibo(n - 1) + fibo(n - 2);
}

int main()
{
    static_assert(fibo(7) == 34);
    const int k = fibo(9);
    std::cout << k << std::endl;
    const int l = fibo(300); // 300th Fibonacci number is large for int
}

您可以将 fibo 设为 constexpr 函数,然后 throw 如果参数无效。如果 fibo 在编译时求值,constexpr 函数中的 throw 将导致编译时错误,否则会导致 运行 时间错误:

constexpr int fibo(int n)
{
    if (n >= 300) throw;
    if (n <= 1) return n; 
    return fibo(n-1) + fibo(n-2); 
}

你可以这样使用它:

int j = fibo(300);             // run time error
constexpr int k = fibo(300);   // compile time error

这是一个 demo

请注意,您不能在 fibo 的定义中 static_assert,因为条件取决于函数参数,它不是常量表达式。