在 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
,因为条件取决于函数参数,它不是常量表达式。
我需要编写这个函数 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
,因为条件取决于函数参数,它不是常量表达式。