用于循环编译的 constexpr

constexpr for loop compilation

本文关键字:constexpr 编译 循环 用于      更新时间:2023-10-16

我已经读过这篇文章,但我仍然不知道如何使用-std=gnu++2a我不确定如何使用整数序列。你能帮我调整下面的代码以便它编译吗?感谢

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