我遇到了这个问题,在编译时我似乎无法检查 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/