gcc 在C++编译期间,我可以计算需要特殊函数的值吗?

0dxa2lsx  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(124)

我知道我对我的问题有些含糊,但我认为基本问题是清楚的。请稍等片刻。
简单地说,我有一个static constexpr点数组,用来找到我需要使用的某些边界。这些边界只依赖于数组,所以它们可以预先计算。然而,我们希望能够改变这些点,每次我们试图测试一些东西时,改变每个值是一件痛苦的事。
例如,假设我有以下设置:
static constexpr数组为

static constexpr double CHECK_POINTS[7] = { -1.5, -1.0, -0.5, 0.0, -0.5, 1.0, 1.5 };

然后在我调用的函数中,我有下面的代码块:

std::vector<double> bounds = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
for(int i=0; i<bounds.size(); i++)
{
    bounds[i] = std::exp(CHECK_POINTS[i]);
}

显然,bounds的值可以在编译时计算出来。有没有什么方法可以让gcc这样做呢?
编辑:我的代码块中的向量不是必需的,数组就可以了。

djmepvbi

djmepvbi1#

static constexpr double CHECK_POINTS[7] = { -1.5, -1.0, -0.5, 0.0, -0.5, 1.0, 1.5 };

static constexpr auto vec = [](){
    std::array bounds = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
    for(int i=0; i<bounds.size(); i++)
    {
        bounds[i] = std::exp(CHECK_POINTS[i]);
    }
    return bounds;
}();

使用gcc https://godbolt.org/z/x5a9q9M1d可以很好地编译它
constexpr std::exp是一个gcc扩展,感谢@phuclv指出)

相关问题