从 constexpr 数组获取 constexpr 属性 有困难
Difficulties getting a constexpr property from a constexpr array
我遇到了这个问题,我似乎无法在编译时检查 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 给我的错误。)我如何得到我需要的结果?
由于您的 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;
}();
}
我遇到了这个问题,我似乎无法在编译时检查 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 给我的错误。)我如何得到我需要的结果?
由于您的 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;
}();
}