请参阅以下代码:
#include <iostream>
constexpr int f(int a, int b)
{
return a<b? a : throw std::out_of_range("out of range");
}
int main()
{
try
{
int n = 0;
f(5, n);
}
catch(const std::exception& ex)
{
std::cout<<"Exception caught"<<std::endl;
std::cout<<ex.what()<<std::endl;
}
}
我知道constexprt函数是在编译时处理的。那么我怎么能将“运行时”本地变量传递给它并在运行时再次在try-catch块中使用它?也许我错过了smth regargind constexprt的功能?
答案 0 :(得分:5)
我知道constexprt函数在编译时处理。
不准确。如果星星对齐,则constexpr
函数可以用于需要的常量表达式 。这意味着它必须满足某些要求,但它仍然是一个功能。你仍然可以将它作为一个使用。
在您的情况下,该函数在运行时被编译和调用。
如果您在需要常量表达式的地方使用它,并且使用了throw
的分支,那么您将看到一系列问题。