c++ - constexpr for 循环编译

标签 c++ c++11 c++17 metaprogramming constexpr

我已阅读 this但我仍然不知道如何使用 -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;
}

最佳答案

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;
}

关于c++ - constexpr for 循环编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62707246/

相关文章:

c++ - insert_or_assign 允许迭代器

c++ - 错误 : "expected constructor, destructor, or type conversion before ' typedef' "

python - 关于带有掩码的 OpenCV GrabCut 分割上的标签?

c++ - 在 C++ 头文件中声明和定义静态变量?

c++ - 如何确保一个类仅派生自预定义的一组派生类?

c++ - 将集合的第一个第 n 个值复制到 C++ 中的 vector 的简单方法

C++, clang : #including associated header with cpp does not compile

c++ - 如何将 map 和 unordered_map 作为同一个对象来处理

c++ - 有没有办法避免数组到指针的衰减?

c++ - 编译时 Bimap static_assert 失败