首页 > 解决方案 > 从 constexpr 数组中获取 constexpr 属性的困难

问题描述

我遇到了这个问题,我似乎无法在编译时检查 an 中的所有元素std::array是否相等。它看起来很简单,无论如何我对C++都不是新手,但我想不通!(我只会使用<algorithm>,但遗憾的是那些在 C++17 中没有标记为 constexpr,而且我坚持使用 C++17,因为 CUDA。)

这是一个示例(无法编译)。

#include <array>

int main()
{
    constexpr std::array<int, 3> a {0, 0, 0};

    constexpr bool equal = [=](){
        for (int i = 1; i < 3; i++)
        {   
            if constexpr (a[0] != a[i])
                return false;
        }
        return true;
    }();
}

为什么不a[0] != a[i]符合 constexpr 的条件?(这是 GCC 和 Clang 给我的错误。)我如何得到我需要的结果?

标签: c++c++17constexpr

解决方案


由于 youri不是编译时常量,因此不能使用if constexpr. 一个简单if的就足够了,它仍然可以在编译时检查你的数组。

#include <array>

int main()
{
    constexpr std::array<int, 3> a {0, 0, 0};

    constexpr bool equal = [=](){
        for (int i = 1; i < 3; i++)
        {   
            if (a[0] != a[i])
          //^^
                return false;
        }
        return true;
    }();
}

推荐阅读