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

问题描述

我需要写这个函数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设为自变量无效。如果在编译时评估throw,则constexpr函数中的fibo会导致编译时错误,否则会导致运行时错误:

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

请注意,static_assert的定义内不能fibo,因为条件取决于函数参数,该参数不是常数表达式。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...