在运行时调用处理constexpr。 C ++

时间:2018-02-27 11:11:03

标签: c++ c++11 try-catch c++14 constexpr

请参阅以下代码:

#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的功能?

1 个答案:

答案 0 :(得分:5)

  

我知道constexprt函数在编译时处理。

不准确。如果星星对齐,则constexpr函数可以用于需要的常量表达式 。这意味着它必须满足某些要求,但它仍然是一个功能。你仍然可以将它作为一个使用。

在您的情况下,该函数在运行时被编译和调用。

如果您在需要常量表达式的地方使用它,并且使用了throw的分支,那么您将看到一系列问题。