gpt4 book ai didi

c++ - 什么时候在编译时计算range::views?

转载 作者:行者123 更新时间:2023-12-01 15:11:12 27 4
gpt4 key购买 nike

range-v3库允许使用views,它允许对数据进行惰性操作。据我所知,仅当在编译时对函数进行求值时,才可以进行惰性操作,但是要实现编译时的计算,代码必须位于可以使用constant expression的上下文中。

我尝试使用函数ranges::view::repeat_n(0,5)重复一个数字并将其存储为constexpr变量,但是编译器错误指出该函数不是constexpr:

error: call to non-‘constexpr’ function ‘ranges::repeat_n_view<Val> ranges::views::repeat_n_fn::operator()(Val, std::ptrdiff_t) const requires  copy_constructible<Val> [with Val = int; std::ptrdiff_t = long int]’
16 | constexpr auto rng_view = ranges::view::repeat_n(0,5);

这是否意味着 View 并不总是恒定表达?

这是我的主要代码:
#include <iostream>
#include <string>
#include <range/v3/view/empty.hpp>
#include <range/v3/view/repeat_n.hpp>
#include <range/v3/algorithm/for_each.hpp>
#include <range/v3/view/cycle.hpp>
#include <range/v3/view/take.hpp>
using std::cout;

int main() {

constexpr auto rng = ranges::view::empty<int>; //OK

//repeat the number zero five times
constexpr auto rng_view = ranges::view::repeat_n(0,5);//ERROR:Call to non-`constexpr` function
std::cout << rng_view << std::endl;

return 0;
{

是否有可能将所有 views存储为 constexpr值,以确保进行编译时间计算?

最佳答案

lazy operations are only possible when a function is evaluated at compile time



惰性操作是按需计算结果的操作,而不是在执行似乎可以计算结果的表达式后立即进行计算的操作。例如,应用于某个容器的变换 View 似乎可以立即将变换操作应用于 View 的每个元素。但是实际上,它仅在您尝试从 View 访问值时才应用转换。

该过程与编译时执行没有任何关系。

关于c++ - 什么时候在编译时计算range::views?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224662/

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