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

标签 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 block 中使用它呢?也许我缺少 smth regargind constexprt 函数?

最佳答案

I know that constexprt functions are processed at compile time.

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

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

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

关于c++ - 在运行时调用处理 constexpr。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49007290/

相关文章:

c++ - 这里的顺序一致性有什么问题?

c++ - 什么时候在 C++11 lambda 的定义中需要明确命名的变量捕获?

C++ 继承 - 为什么调用父方法?

r - 如何重新抛出R中的错误?

php - 异常后恢复PHP执行脚本

c++ - std::collat​​e::transform 导致段错误

c++ - 编写子类构造函数的实现

c++ - 根据大小选择数据类型

c++ - 如何判断数组元素的类型?

javascript - 如果 URL 不正确,fetch API 不会在 catch 中显示确切的错误