我发现一些代码从 iota_view 取消引用 end() 。
我向作者询问了这一点,他们指出,Bound 和 W 类型相同的 iota_view 的 end() 是 iterator{bound},而迭代器的 operator* 只是返回其值。所以这不是 UB 并且完全没问题。
我已经确认了 cppreference 上的观点(假设这一切都是正确的)并且它似乎有效:https://godbolt.org/z/Yv7YPhv3G
#include <ranges>
#include <iostream>
int main() {
auto range = std::views::iota(0, 5);
std::cout << *range.end() << std::endl;
return 0;
}
那么这合法吗?取消引用 end() 感觉很奇怪。
您可以通过示例在这里找到答案 https://youtu.be/ZLkbvEUht-o?feature=shared