gpt4 book ai didi

c++ - 如何检查 const 数组成员在编译时是否单调增长

转载 作者:行者123 更新时间:2023-12-01 22:52:21 25 4
gpt4 key购买 nike

假设我们有常量数组:

const int g_Values[] = { ... };

如何检查成员在编译时是否单调增长,即 g_Values[i] < g_Values[i + 1]

在运行时这可能会像这样检查:

bool IsMonotonously()
{
int i = _countof(g_Values);
int m = MAXINT;
do
{
int v = g_Values[--i];
if (v >= m) return false;
m = v;
} while (i);
return true;
}

但是如何用 constexpr 和 if IsMonotonously() 重写它返回 false - 生成编译时错误。

最佳答案

这对于只是 const 的数组来说是不可能的。您需要使其成为 constexpr 才能在 constexpr 上下文中使用它。

除此之外,您需要做的就是将检查数组的函数实现为constexpr:

template<class T, size_t N>
constexpr bool IsStrictlyMonotonouslyIncreasing(T (&arr)[N])
{
bool result = true;

if (N > 1)
{
for (size_t i = 0; result && (i != N - 1); ++i)
{
result = (arr[i] < arr[i + 1]);
}
}

return result;
}

const int g_Values[] = { 1, 2, 3, 4 };
static_assert(IsStrictlyMonotonouslyIncreasing(g_Values)); // compiler error g_Values is not usable in a constexpr context

constexpr int g_Values2[] = { 1, 2, 3, 4 };
static_assert(IsStrictlyMonotonouslyIncreasing(g_Values2)); // ok

关于c++ - 如何检查 const 数组成员在编译时是否单调增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74078223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com