c++ - 从 constexpr 数组获取 constexpr 属性时遇到困难

标签 c++ c++17 constexpr

我遇到了这个问题,在编译时我似乎无法检查 std::array 中的所有元素是平等的。它看起来很简单,而且我对 C++ 并不陌生,但我无法弄清楚! (我只想使用 <algorithm> 但遗憾的是这些在 C++17 中没有标记为 constexpr,而且我因为 CUDA 而坚持使用 C++17。)

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

#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 给我的错误。)如何获得我需要的结果?

最佳答案

由于您的 i 不是编译时常量,因此您不能使用 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;
    }();
}

关于c++ - 从 constexpr 数组获取 constexpr 属性时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69891734/

相关文章:

c++ - getline(cin,str) 的奇怪输出

c++ - 从另一个 std::Optional 和其他东西初始化 std::Optional 的惯用方法

c++ - 是否可以使用符合 C++17 的 C++14 创建迭代器?

c++ - 什么时候构造 constexpr 对象?

c++ - QPixmap 加载不起作用

python - 使用 stdout stdin 将数组从 C++ exe 传递到 Python

c++ - 我可以将 boost::bind() 与 mem_fun_ref() 一起使用吗?

c++ - 从 C++ 中的集合中删除最后一个元素

c++ - constexpr 静态从 int 转换为具有非固定基础类型的作用域枚举的未定义行为在 C++17 中编译

c++ - 使用 constexpr 返回指针