【发布时间】:2020-03-19 10:00:08
【问题描述】:
假设我有一个模拟range 的generate_my_range 类(特别是regular)。那么下面的代码是否正确:
auto generate_my_range(int some_param) {
auto my_transform_op = [](const auto& x){ return do_sth(x); };
return my_custom_rng_gen(some_param) | ranges::views::transform(my_transform_op);
}
auto cells = generate_my_range(10) | ranges::to<std::vector>;
my_custom_rng_gen(some_param) 是由(第一个)管道运算符按值获取的,还是在我离开 generate_my_range 范围后有一个悬空引用?
函数调用ranges::views::transform(my_custom_rng_gen(some_param),my_transform_op)会不会一样?
如果我使用左值引用会正确吗?例如:
auto generate_my_range(int some_param) {
auto my_transform_op = [](const auto& x){ return do_sth(x); };
auto tmp_ref = my_custom_rng_gen(some_param);
return tmp_ref | ranges::views::transform(my_transform_op);
}
如果这些操作的值取值范围,那么如果我将左值引用传递给容器,我该怎么办?我应该使用ranges::views::all(my_container) 模式吗?
【问题讨论】:
-
my_custom_rng_gen(some_param) 是否已经有界?你的意思是像 godbolt.org/z/aTF8RN 这样没有 take(5) 吗?
-
@Porsche9II 是的,这是一个有界范围。假设它是一个容器