如果我执行一个变换视图操作,我发现视图迭代器不支持 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->符号。
我觉得这有点令人惊讶,尝试了解为什么它没有一个。我在标准和各种网站上没有找到关于视图迭代器通常期望的概述,以及为什么至少其中一些没有operator->。
有人知道答案或有关此问题的良好信息来源吗?
->
运算符需要创建临时值,返回指针可能会很棘手/不可能实现,如果在相同的迭代器位置多次调用->
也会效率低下。 - Alan Birtles