C++ 在运行时调用processing constexpr。C++;

C++ 在运行时调用processing constexpr。C++;,c++,c++11,try-catch,c++14,constexpr,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)

请参阅下面的代码:

#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;
    }
}
#包括
constexpr int f(int a,int b)
{
归还
我知道constexprt函数是在编译时处理的

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

在您的例子中,函数是在运行时编译和调用的

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

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

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

在您的例子中,函数是在运行时编译和调用的


如果您在需要常量表达式的地方使用它,并且使用了带有
抛出的分支
,那么您将看到一系列问题迎面而来。

当使用编译期间未知的一个或多个值调用constexpr函数时,它的行为与普通函数类似。这意味着它在ru处计算结果n时间。不需要两个函数来执行相同的操作,当使用编译期间未知的一个或多个值调用constexpr函数时,它的行为与普通函数类似。这意味着它在运行时计算结果。不需要两个函数来执行相同的操作,