constexpr for循环编译

5

我已阅读这篇文章,但我仍然不知道如何在-std=gnu++2a下使它工作。 我不确定如何使用整数序列(integer seq)。 您能否帮助我改编以下代码以使其编译通过?谢谢

constexpr bool example(const int k)
{
    return k < 23 ? true: false;
}

constexpr bool looper()
{
    constexpr bool result = false;
    for(int k = 0; k < 20; k ++)
    {
        for (int i = 0 ; i < k; ++i)
        {
        constexpr bool result = example(i);
        }
    }

    return result;
}

int main()
{
    constexpr bool result = looper();
    return 0;
}
1个回答

3

constexpr被用于编译时已知的变量,例如constexpr int i =1+2。编译器可以在编译前计算出结果并将其变为常量。

在这里example(i);,它使用了一个非常量变量,并将其传递给一个接受const变量的函数,你认为它会如何工作?

而这个return k < 23 ? true: false;可以写成return k < 23 ;

如果你想使用index_sequence在编译时完成循环工作,你可以使用以下代码:

#include <utility>
#include <iostream>

template<size_t ...i>
constexpr bool example(std::index_sequence<i...>){
    return (false,..., (i < 23));
}

template< size_t...j>
constexpr bool helper(std::index_sequence<j...>)
{
    return ((example( std::make_index_sequence<j>{})),...);
}

template< size_t n>
constexpr bool loop()
{
    return helper(std::make_index_sequence<n>{});
}


int main()
{
    constexpr bool result = loop<20>();
    std::cout<<result;
    return 0;
}

我实际上正在尝试迭代整数序列,但不知道如何生成它。如果我知道如何做到这一点,那么我将调用example(i)<sequence_number>或类似的内容。k<23是从一个更大的代码库中编辑的,但感谢您的评论。如果您访问所发布的2个链接,可能会更清楚我要做什么。 - eucristian
你甚至不需要 result,你可以直接 return (i<23),...; - Caleth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接