【发布时间】:2021-04-12 17:53:12
【问题描述】:
如果我执行转换视图操作,我注意到视图迭代器不支持 operator->。所以在代码方面
void transform_view( )
{
struct Z { int a; };
std::ranges::single_view view { Z { 99 } };
auto transform_view { std::ranges::views::transform( view, []( auto const& z ){ return Z { z.a + 10 }; } ) };
// The operator-> does not compile here as there is none defined
// auto transform_view_first_value { transform_view.begin( )->a };
}
这与 24.7.6.3 中的标准“符合预期”,它定义 range.transform.iterator 没有运算符->。
我觉得这有点令人惊讶,并试图理解为什么它没有。我无法在标准或各种网站上找到并概述通常对视图迭代器的期望,以及为什么特别是至少其中一些没有 operator-> 的原因。
有没有人知道答案或很好的信息来源?
【问题讨论】:
-
可能因为
->运算符可能必须创建一个临时值并且返回一个指针会很棘手/不可能,如果您在同一个迭代器位置多次调用->它也会是低效
标签: c++